diff options
Diffstat (limited to 'examples/full-todolist')
| -rw-r--r-- | examples/full-todolist/Cargo.lock | 31 | ||||
| -rw-r--r-- | examples/full-todolist/Cargo.toml | 2 | ||||
| -rw-r--r-- | examples/full-todolist/src/main.rs | 56 |
3 files changed, 54 insertions, 35 deletions
diff --git a/examples/full-todolist/Cargo.lock b/examples/full-todolist/Cargo.lock index 28d551b..ad9f475 100644 --- a/examples/full-todolist/Cargo.lock +++ b/examples/full-todolist/Cargo.lock @@ -3,6 +3,23 @@ version = 4 [[package]] +name = "arg-picker" +version = "0.2.0" +dependencies = [ + "arg-picker-macros", + "just_fmt", +] + +[[package]] +name = "arg-picker-macros" +version = "0.2.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -65,17 +82,17 @@ dependencies = [ [[package]] name = "mingling" -version = "0.4.0" +version = "0.5.0" dependencies = [ + "arg-picker", "mingling_core", "mingling_macros", "serde", - "size", ] [[package]] name = "mingling_core" -version = "0.4.0" +version = "0.5.0" dependencies = [ "just_fmt", "might_be_async", @@ -85,7 +102,7 @@ dependencies = [ [[package]] name = "mingling_macros" -version = "0.4.0" +version = "0.5.0" dependencies = [ "just_fmt", "proc-macro2", @@ -164,12 +181,6 @@ dependencies = [ ] [[package]] -name = "size" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6709c7b6754dca1311b3c73e79fcce40dd414c782c66d88e8823030093b02b" - -[[package]] name = "syn" version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/examples/full-todolist/Cargo.toml b/examples/full-todolist/Cargo.toml index 9d6f1a7..fb3d3be 100644 --- a/examples/full-todolist/Cargo.toml +++ b/examples/full-todolist/Cargo.toml @@ -10,7 +10,7 @@ serde_json = "1.0.150" [dependencies.mingling] path = "../../mingling" features = [ - "parser", + "picker", "extras", "structural_renderer", ] diff --git a/examples/full-todolist/src/main.rs b/examples/full-todolist/src/main.rs index 0748832..cac2e13 100644 --- a/examples/full-todolist/src/main.rs +++ b/examples/full-todolist/src/main.rs @@ -9,9 +9,10 @@ use mingling::{ LazyInit, LazyRes, macros::route, + picker::value::Flag, prelude::*, res::ResExitCode, - setup::{ExitCodeSetup, HelpFlagSetup, StructuralRendererSetup}, + setup::{ExitCodeSetup, picker::HelpFlagSetup, picker::StructuralRendererSetup}, }; use std::io::Write; @@ -35,23 +36,33 @@ dispatcher!("clean"); // Define states -pack!(StateAddTodo = String); -pack!(StateCompleteTodo = i32); -pack!(StateListTodo = bool); +#[derive(Grouped, Wrap)] +pub struct StateAddTodo(String); + +#[derive(Grouped, Wrap)] +pub struct StateCompleteTodo(i32); + +#[derive(Grouped, Wrap)] +pub struct StateListTodo(bool); // Define errors -pack!(ErrorNoTaskDescriptionProvided = ()); -pack!(ErrorNoIndexProvided = ()); -pack!(ErrorIndexOutOfBounds = ()); +#[derive(Grouped)] +pub struct ErrorNoTaskDescriptionProvided; + +#[derive(Grouped)] +pub struct ErrorNoIndexProvided; + +#[derive(Grouped)] +pub struct ErrorIndexOutOfBounds; fn main() { let mut program = ThisProgram::new(); // Setups - program.with_setup(ExitCodeSetup::default()); + program.with_setup(ExitCodeSetup); program.with_setup(StructuralRendererSetup); - program.with_setup(HelpFlagSetup::new(["--help", "-h"])); + program.with_setup(HelpFlagSetup::new(&arg![help: Flag, 'h'])); // Flags let all = program.pick_global_flag(["-A", "--all"]); @@ -65,12 +76,7 @@ fn main() { ); program.with_resource(ResProgramFlags { all }); - // Dispatchers - program.with_dispatcher(CMDAdd); - program.with_dispatcher(CMDComplete); - program.with_dispatcher(CMDList); - program.with_dispatcher(CMDClean); - + // Execute program.exec_and_exit(); } @@ -79,11 +85,12 @@ fn main() { #[chain] fn handle_add(args: EntryAdd) -> Next { let task: String = route! { - args - .pick_or_route((), ErrorNoTaskDescriptionProvided::new(())) - .unpack() + args.pick_or_route(&arg![String], || { + ErrorNoTaskDescriptionProvided.to_chain() + }) + .to_result() }; - StateAddTodo::new(task).to_chain() + StateAddTodo(task).to_chain() } #[chain] @@ -95,7 +102,7 @@ fn handle_state_add_todo( let todolist = todolist.get_mut(); // Unpack state and read description - let description = state.inner; + let description = state.0; todolist.items.push(Todo { item: description, @@ -120,9 +127,10 @@ fn handle_list(_args: EntryList, todolist: &mut LazyRes<ResTodoList>) -> Next { #[chain] fn handle_complete(args: EntryComplete) -> Next { let index: i32 = route! { - args.pick_or_route((), ErrorNoIndexProvided::new(())).unpack() + args.pick_or_route(&arg![i32], || ErrorNoIndexProvided.to_chain()) + .to_result() }; - StateCompleteTodo::new(index).to_chain() + StateCompleteTodo(index).to_chain() } #[chain] @@ -131,12 +139,12 @@ fn handle_state_complete_todo( todolist: &mut LazyRes<ResTodoList>, ) -> Next { let todolist = todolist.get_mut(); - let index = state.inner as usize; + let index = state.0 as usize; if index < todolist.items.len() { todolist.items[index].completed = true; todolist.clone().to_render() } else { - ErrorIndexOutOfBounds::new(()).to_render() + ErrorIndexOutOfBounds.to_render() } } |
