aboutsummaryrefslogtreecommitdiff
path: root/examples/full-todolist/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/full-todolist/src/main.rs')
-rw-r--r--examples/full-todolist/src/main.rs54
1 files changed, 31 insertions, 23 deletions
diff --git a/examples/full-todolist/src/main.rs b/examples/full-todolist/src/main.rs
index 0748832..9c7bfe8 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,15 +36,25 @@ 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();
@@ -51,7 +62,7 @@ fn main() {
// Setups
program.with_setup(ExitCodeSetup::default());
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()
}
}