diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-04-27 21:19:56 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-04-27 21:19:56 +0800 |
| commit | 2c32196bbc632411d4f6998a506ca262a805a666 (patch) | |
| tree | 62934fbda52b11bfff984030dbbe52a1926fb4ac /docs/res | |
| parent | ad10b82c1e6785cbf88562117b1609905cfeb6dc (diff) | |
Add global resource system to Program
Diffstat (limited to 'docs/res')
| -rw-r--r-- | docs/res/changlog_examples/feat_program_res.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/docs/res/changlog_examples/feat_program_res.rs b/docs/res/changlog_examples/feat_program_res.rs new file mode 100644 index 0000000..b3533f1 --- /dev/null +++ b/docs/res/changlog_examples/feat_program_res.rs @@ -0,0 +1,50 @@ +use mingling::{ + macros::{chain, dispatcher, gen_program, pack, r_println, renderer}, + parser::Picker, + this, +}; + +// Define a struct with Default and Clone derives +#[derive(Debug, Default, Clone)] +struct Global { + name: String, + age: i32, +} + +fn main() { + let mut program = ThisProgram::new(); + + // Add a global resource here + program.with_resource(Global::default()); + + program.exec(); +} + +dispatcher!("modify", ResModifyCommand => ResModifyEntry); + +pack!(DisplayGlobal = ()); + +#[chain] +fn modify(prev: ResModifyEntry) { + let (name, age) = Picker::<()>::new(prev.inner) + .pick::<String>("--name") + .pick::<i32>("--age") + .unpack_directly(); + + // Modify the global resource + this::<ThisProgram>().modify_res(|r: &mut Global| { + r.name = name; + r.age = age + }); + + DisplayGlobal::default() +} + +#[renderer] +fn render_global(_prev: DisplayGlobal) { + // Read the global resource + let global = this::<ThisProgram>().res_or_default::<Global>(); + r_println!("Name: {}, Age: {}", global.name, global.age) +} + +gen_program!(); |
