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§
Sourcefn metadata(&self) -> &CallableMetadata
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.
Sourcefn 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,
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.