Trait Callable

Source
pub trait Callable {
    // Required methods
    fn metadata(&self) -> &CallableMetadata;
    fn exec<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        scope: Scope<'life1>,
        machine: &'life2 mut Machine,
    ) -> Pin<Box<dyn Future<Output = CallResult> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;
}
Expand description

A trait to define a callable that is executed by a Machine.

The callable themselves are immutable but they can reference mutable state. Given that EndBASIC is not threaded, it is sufficient for those references to be behind a RefCell and/or an Rc.

Idiomatically, these objects need to provide a new() method that returns an Rc<Callable>, as that’s the type used throughout the execution engine.

Required Methods§

Source

fn metadata(&self) -> &CallableMetadata

Returns the metadata for this function.

The return value takes the form of a reference to force the callable to store the metadata as a struct field so that calls to this function are guaranteed to be cheap.

Source

fn exec<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, scope: Scope<'life1>, machine: &'life2 mut Machine, ) -> Pin<Box<dyn Future<Output = CallResult> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Executes the function.

args contains the arguments to the function call.

machine provides mutable access to the current state of the machine invoking the function.

Implementors§