Struct WasmSandbox

Source
pub struct WasmSandbox { /* private fields */ }
Expand description

Main sandbox controller

Implementations§

Source§

impl WasmSandbox

Source

pub fn new() -> Result<Self>

Create a new sandbox with default configuration

Source

pub fn with_config(config: SandboxConfig) -> Result<Self>

Create a sandbox with custom configuration

Source

pub fn load_module(&self, wasm_bytes: &[u8]) -> Result<ModuleId>

Load a WASM module

Source

pub fn create_instance( &mut self, module_id: ModuleId, instance_config: Option<InstanceConfig>, ) -> Result<InstanceId>

Create a new instance of a module

Source

pub async fn call_function<P, R>( &self, instance_id: InstanceId, function_name: &str, params: P, ) -> Result<R>
where P: Serialize + 'static, R: for<'de> Deserialize<'de> + 'static,

Run a function in the sandbox

Source

pub async fn from_source(source_path: &str) -> Result<Self>

Create a new sandbox from source code with automatic compilation and configuration.

This is the easiest way to get started - just point to a source file and the sandbox will automatically detect the language, compile it to WebAssembly, and set up safe defaults.

§Examples
use wasm_sandbox::WasmSandbox;
 
#[tokio::main]
async fn main() -> Result<(), wasm_sandbox::Error> {
    // Rust source file
    let sandbox = WasmSandbox::from_source("./calculator.rs").await?;
    let result: i32 = sandbox.call("add", &(5, 3)).await?;
     
    // Python source (when supported)
    let sandbox = WasmSandbox::from_source("./processor.py").await?;
    Ok(())
}
Source

pub fn builder() -> WasmSandboxBuilder

Create a new sandbox builder for more control over configuration.

§Examples
use wasm_sandbox::WasmSandbox;
use std::time::Duration;
 
#[tokio::main]
async fn main() -> Result<(), wasm_sandbox::Error> {
    let sandbox = WasmSandbox::builder()
        .source("./my_program.rs")
        .timeout_duration(Duration::from_secs(30))
        .memory_limit(64 * 1024 * 1024) // 64MB
        .enable_file_access(false)
        .build()
        .await?;
    Ok(())
}
Source

pub async fn call<P, R>(&self, function_name: &str, params: &P) -> Result<R>
where P: Serialize + Send + Sync, R: for<'de> Deserialize<'de> + Send + Sync + 'static,

Call a function in the sandbox with automatic instance management.

This method automatically creates an instance if needed and calls the function. For more control, use the explicit instance creation methods.

Source

pub async fn execute_main(&self, args: &[&str]) -> Result<String>

Execute a complete program with command-line arguments.

This calls the main function of the WebAssembly module with the provided arguments.

Source

pub fn runtime(&self) -> &dyn WasmRuntime

Get a reference to the runtime

Source

pub fn runtime_mut(&mut self) -> &mut dyn WasmRuntime

Get a mutable reference to the runtime

Source

pub fn get_instance(&self, instance_id: InstanceId) -> Option<&SandboxInstance>

Get a reference to an instance

Source

pub fn get_instance_mut( &mut self, instance_id: InstanceId, ) -> Option<&mut SandboxInstance>

Get a mutable reference to an instance

Source

pub fn remove_instance( &mut self, instance_id: InstanceId, ) -> Option<SandboxInstance>

Remove an instance

Source

pub fn instance_ids(&self) -> Vec<InstanceId>

Get all instance IDs

Source

pub fn get_instance_resource_usage( &self, instance_id: InstanceId, ) -> Result<DetailedResourceUsage>

Get resource usage for a specific instance

Source

pub fn reset_instance(&mut self, instance_id: InstanceId) -> Result<()>

Reset an instance (recreate it with the same configuration)

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> GetSetFdFlags for T

Source§

fn get_fd_flags(&self) -> Result<FdFlags, Error>
where T: AsFilelike,

Query the “status” flags for the self file descriptor.
Source§

fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>
where T: AsFilelike,

Create a new SetFdFlags value for use with set_fd_flags. Read more
Source§

fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>
where T: AsFilelike,

Set the “status” flags for the self file descriptor. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more