#[macro_use]
extern crate papyrus;
use papyrus::cmds::CommandResult;
use papyrus::cmdtree::{Builder, BuilderChain};
use papyrus::run::RunCallbacks;
fn main() {
let mut repl = repl!(String);
repl.data.with_cmdtree_builder(custom_cmds()).unwrap();
let mut app_data = String::new();
let output = repl.run(RunCallbacks::new(&mut app_data)).unwrap();
println!("{}", output);
}
fn custom_cmds() -> Builder<CommandResult<String>> {
Builder::new("custom-cmds-app")
.add_action("echo", "repeat back input after command", |writer, args| {
writeln!(writer, "{}", args.join(" ")).ok();
CommandResult::Empty
})
.begin_class("case", "change case of app_data")
.add_action("upper", "make app_data uppercase", |_, _| {
CommandResult::<String>::app_data_fn(|app_data, _repldata, _| {
*app_data = app_data.to_uppercase();
String::new()
})
})
.add_action("lower", "make app_data lowercase", |_, _| {
CommandResult::<String>::app_data_fn(|app_data, _repldata, _| {
*app_data = app_data.to_lowercase();
String::new()
})
})
.end_class()
.unwrap()
}