macro_rules! static_command { ( $modname:ident, $name:literal, $descr:literal, $fun:ident ) => { ... }; }
riot_module_shell
only.Expand description
Make a function whose signature is fn(&mut
Stdio
,
Args
<'b>) -> impl
Termination
available through
XFA in any RIOT shell, even when called throuch C. (The function’s signature may be more
generic, eg. accepting an impl
Write
and an impl
IntoIterator
<&str>
).
Compared to CommandList, this is limited by only taking functions and not closures – but that allows using it even in scenarios where CommandList’s hacks that reconstruct a full closure from something that’s only a plain function call in C are unavailable.
The modname identifier needs to be provided as a name that can be used for a private module
created by the macro. The name literal is the command name as matched by the shell, with the
descr literal shown next to it when running help
. The fun is a local function of static
lifetime that gets executed whenever the shell command is invoked.
§Example
fn do_echo(
_stdio: &mut riot_wrappers::stdio::Stdio,
args: riot_wrappers::shell::Args<'_>,
)
{
use riot_wrappers::println;
println!("Running args of run:");
for a in args.iter() {
println!("{:?}", a);
}
}
riot_wrappers::static_command!(echo, "echo", "Print the arguments in separate lines", do_echo);