Class: Wasmtime::WasiConfig

Inherits:
Object
  • Object
show all
Defined in:
ext/src/ruby_api/wasi_config.rs

Overview

WASI config to be sent as Store.new’s wasi_config keyword argument.

Instance methods mutate the current object and return self.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.newWasiConfig

Create a new Wasmtime::WasiConfig. By default, it has nothing: no stdin/out/err, no env, no argv, no file access.

Returns:



250
251
252
# File 'ext/src/ruby_api/wasi_config.rs', line 250

pub fn new() -> Self {
    Self::default()
}

Instance Method Details

#add_determinismWasiConfig

Use deterministic implementations for clocks and random methods.

Returns:



257
258
259
260
261
# File 'ext/src/ruby_api/wasi_config.rs', line 257

pub fn add_determinism(rb_self: RbSelf) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.deterministic = true;
    rb_self
}

#allow_ip_name_lookup(enabled) ⇒ WasiConfig

Allow or deny IP name lookup (DNS resolution).

Parameters:

  • enabled (Boolean)

    Whether to allow IP name lookup

Returns:



451
452
453
454
455
# File 'ext/src/ruby_api/wasi_config.rs', line 451

pub fn allow_ip_name_lookup(rb_self: RbSelf, enabled: bool) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.allow_ip_name_lookup = Some(enabled);
    rb_self
}

#allow_tcp(enabled) ⇒ WasiConfig

Allow or deny TCP socket access. Disabled by default.

Parameters:

  • enabled (Boolean)

    Whether to allow TCP socket access

Returns:



429
430
431
432
433
# File 'ext/src/ruby_api/wasi_config.rs', line 429

pub fn allow_tcp(rb_self: RbSelf, enabled: bool) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.allow_tcp = Some(enabled);
    rb_self
}

#allow_udp(enabled) ⇒ WasiConfig

Allow or deny UDP socket access. Disabled by default.

Parameters:

  • enabled (Boolean)

    Whether to allow UDP socket access

Returns:



440
441
442
443
444
# File 'ext/src/ruby_api/wasi_config.rs', line 440

pub fn allow_udp(rb_self: RbSelf, enabled: bool) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.allow_udp = Some(enabled);
    rb_self
}

#inherit_networkWasiConfig

Allow all network addresses accessible to the host. TCP, UDP, and IP name lookup must be enabled separately with allow_tcp, allow_udp, and allow_ip_name_lookup.

Note: any network access happens while the Global VM Lock (GVL) is held, so other threads will be blocked in the meantime.

Returns:



418
419
420
421
422
# File 'ext/src/ruby_api/wasi_config.rs', line 418

pub fn inherit_network(rb_self: RbSelf) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.inherit_network = true;
    rb_self
}

#inherit_stderrWasiConfig

Inherit stderr from the current Ruby process.

Returns:



332
333
334
335
336
# File 'ext/src/ruby_api/wasi_config.rs', line 332

pub fn inherit_stderr(rb_self: RbSelf) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stderr = Some(WriteStream::Inherit);
    rb_self
}

#inherit_stdinWasiConfig

Inherit stdin from the current Ruby process.

Returns:



266
267
268
269
270
# File 'ext/src/ruby_api/wasi_config.rs', line 266

pub fn inherit_stdin(rb_self: RbSelf) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stdin = Some(ReadStream::Inherit);
    rb_self
}

#inherit_stdoutWasiConfig

Inherit stdout from the current Ruby process.

Returns:



297
298
299
300
301
# File 'ext/src/ruby_api/wasi_config.rs', line 297

pub fn inherit_stdout(rb_self: RbSelf) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stdout = Some(WriteStream::Inherit);
    rb_self
}

#set_argv(args) ⇒ WasiConfig

Set the arguments (argv) to the specified Array.

Parameters:

  • args (Array<String>)

Returns:



379
380
381
382
383
# File 'ext/src/ruby_api/wasi_config.rs', line 379

pub fn set_argv(rb_self: RbSelf, argv: RArray) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.args = Some(argv.into());
    rb_self
}

#set_env(env) ⇒ WasiConfig

Set env to the specified Hash.

Parameters:

  • env (Hash<String, String>)

Returns:



368
369
370
371
372
# File 'ext/src/ruby_api/wasi_config.rs', line 368

pub fn set_env(rb_self: RbSelf, env: RHash) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.env = Some(env.into());
    rb_self
}

#set_mapped_directory(host_path, guest_path, fs_perms) ⇒ WasiConfig

Set mapped directory for host path and guest path.

Parameters:

  • host_path (String)
  • guest_path (String)
  • fs_perms (Symbol)

    Filesystem permissions, either :read_only or :read_write

Returns:



392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
# File 'ext/src/ruby_api/wasi_config.rs', line 392

pub fn set_mapped_directory(
    rb_self: RbSelf,
    host_path: RString,
    guest_path: RString,
    fs_perms: Symbol,
) -> RbSelf {
    let mapped_dir = MappedDirectory {
        host_path: host_path.into(),
        guest_path: guest_path.into(),
        fs_perms: fs_perms.into(),
    };

    let mut inner = rb_self.inner.borrow_mut();
    inner.mapped_directories.push(mapped_dir);

    rb_self
}

#set_stderr_buffer(buffer, capacity) ⇒ WasiConfig

Set stderr to write to a string buffer. If the string buffer is frozen, Wasm execution will raise a Wasmtime::Error error. No encoding checks are done on the resulting string, it is the caller's responsibility to ensure the string contains a valid encoding

Parameters:

  • buffer (String)

    The string buffer to write to.

  • capacity (Integer)

    The maximum number of bytes that can be written to the output buffer.

Returns:



358
359
360
361
362
363
# File 'ext/src/ruby_api/wasi_config.rs', line 358

pub fn set_stderr_buffer(rb_self: RbSelf, buffer: RString, capacity: usize) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stderr = Some(WriteStream::Buffer(buffer.into(), capacity));
    rb_self
}
/// @yard

#set_stderr_file(path) ⇒ WasiConfig

Set stderr to write to a file. Will truncate the file if it exists, otherwise try to create it.

Parameters:

  • path (String)

    The path of the file to write to.

Returns:



344
345
346
347
348
# File 'ext/src/ruby_api/wasi_config.rs', line 344

pub fn set_stderr_file(rb_self: RbSelf, path: RString) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stderr = Some(WriteStream::Path(path.into()));
    rb_self
}

#set_stdin_file(path) ⇒ WasiConfig

Set stdin to read from the specified file.

Parameters:

  • path (String)

    The path of the file to read from.

Returns:



277
278
279
280
281
# File 'ext/src/ruby_api/wasi_config.rs', line 277

pub fn set_stdin_file(rb_self: RbSelf, path: RString) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stdin = Some(ReadStream::Path(path.into()));
    rb_self
}

#set_stdin_string(content) ⇒ WasiConfig

Set stdin to the specified String.

Parameters:

  • content (String)

Returns:



288
289
290
291
292
# File 'ext/src/ruby_api/wasi_config.rs', line 288

pub fn set_stdin_string(rb_self: RbSelf, content: RString) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stdin = Some(ReadStream::String(content.into()));
    rb_self
}

#set_stdout_buffer(buffer, capacity) ⇒ WasiConfig

Set stdout to write to a string buffer. If the string buffer is frozen, Wasm execution will raise a Wasmtime::Error error. No encoding checks are done on the resulting string, it is the caller's responsibility to ensure the string contains a valid encoding

Parameters:

  • buffer (String)

    The string buffer to write to.

  • capacity (Integer)

    The maximum number of bytes that can be written to the output buffer.

Returns:



323
324
325
326
327
# File 'ext/src/ruby_api/wasi_config.rs', line 323

pub fn set_stdout_buffer(rb_self: RbSelf, buffer: RString, capacity: usize) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stdout = Some(WriteStream::Buffer(buffer.into(), capacity));
    rb_self
}

#set_stdout_file(path) ⇒ WasiConfig

Set stdout to write to a file. Will truncate the file if it exists, otherwise try to create it.

Parameters:

  • path (String)

    The path of the file to write to.

Returns:



309
310
311
312
313
# File 'ext/src/ruby_api/wasi_config.rs', line 309

pub fn set_stdout_file(rb_self: RbSelf, path: RString) -> RbSelf {
    let mut inner = rb_self.inner.borrow_mut();
    inner.stdout = Some(WriteStream::Path(path.into()));
    rb_self
}

#socket_addr_check {|addr, use| ... } ⇒ WasiConfig

Set a custom check function for socket address access control. The block will be called for each socket operation with the socket address (as a String) and the operation type (as a Symbol: :tcp_bind, :tcp_listen, :tcp_accept, :tcp_connect, :udp_bind, :udp_send, or :udp_receive). The block should return true to allow the operation or false to deny it. If the block raises an exception, the operation will be denied.

Note: any network access happens while the Global VM Lock (GVL) is held, so other threads will be blocked in the meantime.

Yield Parameters:

  • addr (String)

    The socket address (e.g., "127.0.0.1:8080")

  • use (Symbol)

    The type of socket operation

Yield Returns:

  • (Boolean)

    true to allow the operation, false to deny it

Returns:



473
474
475
476
477
478
479
480
# File 'ext/src/ruby_api/wasi_config.rs', line 473

pub fn socket_addr_check(ruby: &Ruby, rb_self: RbSelf) -> RbSelf {
    if ruby.block_given() {
        let proc = ruby.block_proc().unwrap();
        let mut inner = rb_self.inner.borrow_mut();
        inner.socket_addr_check = Some(proc.into());
    }
    rb_self
}