[−][src]Trait endbasic_core::exec::Command
A trait to define a command that is executed by a Machine.
The commands 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
pub fn metadata(&self) -> &CallableMetadata[src]
Returns the metadata for this command.
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.
#[must_use]pub fn exec<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [(Option<Expr>, ArgSep)],
machine: &'life2 mut Machine
) -> Pin<Box<dyn Future<Output = Result<()>> + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait, [src]
&'life0 self,
args: &'life1 [(Option<Expr>, ArgSep)],
machine: &'life2 mut Machine
) -> Pin<Box<dyn Future<Output = Result<()>> + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Executes the command.
args contains the arguments as provided in the invocation of the command. Each entry in
this array contains an optional expression (to support things like PRINT a, , b) and the
separator that was used between that argument and the next. The last entry in args always
has ArgSep::End as the separator.
machine provides mutable access to the current state of the machine invoking the command.
Commands cannot return any value except for errors.