diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-04-05 20:33:57 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-04-05 20:33:57 +0800 |
| commit | b6876f9df6e3119331fac01c0bc954ca9f3c798b (patch) | |
| tree | 030301c8d434d51fa386e9a5fff77bce5899733b /mingling_core/src/program/setup | |
| parent | b41e201e554c4ba5ad6f1e09ce58dd3d10b6a635 (diff) | |
Add general renderer support with serialization formats
Diffstat (limited to 'mingling_core/src/program/setup')
| -rw-r--r-- | mingling_core/src/program/setup/general_renderer.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/mingling_core/src/program/setup/general_renderer.rs b/mingling_core/src/program/setup/general_renderer.rs new file mode 100644 index 0000000..8b41b68 --- /dev/null +++ b/mingling_core/src/program/setup/general_renderer.rs @@ -0,0 +1,61 @@ +use std::fmt::Display; + +use crate::{ + ProgramCollect, + program::{Program, setup::ProgramSetup}, +}; + +/// Sets up the general renderer for the program: +/// +/// - Adds a `--renderer` global argument to specify the renderer type +pub struct GeneralRendererSimpleSetup; + +impl<C, G> ProgramSetup<C, G> for GeneralRendererSimpleSetup +where + C: ProgramCollect, + G: Display, +{ + fn setup(&mut self, program: &mut Program<C, G>) { + program.global_argument("--renderer", |p, renderer| { + p.general_renderer_name = renderer.into(); + }); + } +} + +/// Sets up the general renderer for the program: +/// +/// - Adds global flags to specify the renderer type: +/// * `--json` for JSON output +/// * `--json-pretty` for pretty-printed JSON output +/// * `--yaml` for YAML output +/// * `--toml` for TOML output +/// * `--ron` for RON output +/// * `--ron-pretty` for pretty-printed RON output +pub struct GeneralRendererSetup; + +impl<C, G> ProgramSetup<C, G> for GeneralRendererSetup +where + C: ProgramCollect, + G: Display, +{ + fn setup(&mut self, program: &mut Program<C, G>) { + program.global_flag("--json", |p| { + p.general_renderer_name = crate::GeneralRendererSetting::Json + }); + program.global_flag("--json-pretty", |p| { + p.general_renderer_name = crate::GeneralRendererSetting::JsonPretty.into(); + }); + program.global_flag("--yaml", |p| { + p.general_renderer_name = crate::GeneralRendererSetting::Yaml.into(); + }); + program.global_flag("--toml", |p| { + p.general_renderer_name = crate::GeneralRendererSetting::Toml.into(); + }); + program.global_flag("--ron", |p| { + p.general_renderer_name = crate::GeneralRendererSetting::Ron.into(); + }); + program.global_flag("--ron-pretty", |p| { + p.general_renderer_name = crate::GeneralRendererSetting::RonPretty.into(); + }); + } +} |
