Struct MultiUseContextCallback

Source
pub struct MultiUseContextCallback<'func, Cur: Sandbox, F>
where F: FnOnce(&mut MultiUseGuestCallContext) -> Result<()> + 'func,
{ /* private fields */ }
Expand description

A TransitionMetadata that calls a callback. The callback function takes a mutable reference to a MultiUseGuestCallContext and returns a Result<()> to signify success or failure of the function.

The function use the context to call guest functions.

Construct one of these by passing your callback to MultiUseContextCallback::from, as in the following code (assuming MySandbox is a Sandbox implementation):

let my_cb_fn: dyn FnOnce(&mut MultiUseGuestCallContext) -> Result<()> = |_sbox| {
    println!("hello world!");
};
let mutating_cb = MultiUseContextCallback::from(my_cb_fn);

Implementations§

Source§

impl<Cur: Sandbox, F> MultiUseContextCallback<'_, Cur, F>

Source

pub fn call(self, cur: &mut MultiUseGuestCallContext) -> Result<()>

Invokes the callback on the provided guest context

Trait Implementations§

Source§

impl<'a, F> EvolvableSandbox<MultiUseSandbox, MultiUseSandbox, MultiUseContextCallback<'a, MultiUseSandbox, F>> for MultiUseSandbox
where F: FnOnce(&mut MultiUseGuestCallContext) -> Result<()> + 'a,

Source§

fn evolve( self, transition_func: MultiUseContextCallback<'a, MultiUseSandbox, F>, ) -> Result<MultiUseSandbox>

The purpose of this function is to allow multiple states to be associated with a single MultiUseSandbox.

An implementation such as HyperlightJs or HyperlightWasm can use this to call guest functions to load JS or WASM code and then evolve the sandbox causing state to be captured. The new MultiUseSandbox can then be used to call guest functions to execute the loaded code.

The evolve function creates a new MultiUseCallContext which is then passed to a callback function allowing the callback function to call guest functions as part of the evolve process, once the callback function is complete the context is finished using a crate internal method that does not restore the prior state of the Sandbox. It then creates a mew memory snapshot on the snapshot stack and returns the MultiUseSandbox

Source§

impl<'a, Cur: Sandbox, F> From<F> for MultiUseContextCallback<'a, Cur, F>
where F: FnOnce(&mut MultiUseGuestCallContext) -> Result<()> + 'a,

Source§

fn from(val: F) -> Self

Converts to this type from the input type.
Source§

impl<Cur: Sandbox, Next: Sandbox, F> TransitionMetadata<Cur, Next> for MultiUseContextCallback<'_, Cur, F>

Auto Trait Implementations§

§

impl<'func, Cur, F> Freeze for MultiUseContextCallback<'func, Cur, F>
where F: Freeze,

§

impl<'func, Cur, F> RefUnwindSafe for MultiUseContextCallback<'func, Cur, F>

§

impl<'func, Cur, F> Send for MultiUseContextCallback<'func, Cur, F>
where F: Send, Cur: Send,

§

impl<'func, Cur, F> Sync for MultiUseContextCallback<'func, Cur, F>
where F: Sync, Cur: Sync,

§

impl<'func, Cur, F> Unpin for MultiUseContextCallback<'func, Cur, F>
where F: Unpin, Cur: Unpin,

§

impl<'func, Cur, F> UnwindSafe for MultiUseContextCallback<'func, Cur, F>
where F: UnwindSafe, Cur: UnwindSafe,

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> 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> 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, 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