From a127d6f3cf2741d4dc404959c5481fa61651e133 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 16 May 2026 00:07:59 +0800 Subject: Refactor general_renderer into granular format-specific features --- mingling/Cargo.toml | 33 ++++++++++++++++++++++++++++++--- mingling/src/example_docs.rs | 2 ++ mingling/src/features.rs | 24 ++++++++++++++++++++++++ mingling/src/lib.rs | 12 ++++++++++++ mingling/src/setups/general_renderer.rs | 7 +++++++ 5 files changed, 75 insertions(+), 3 deletions(-) (limited to 'mingling') diff --git a/mingling/Cargo.toml b/mingling/Cargo.toml index 311cb97..da85eaf 100644 --- a/mingling/Cargo.toml +++ b/mingling/Cargo.toml @@ -28,14 +28,41 @@ default = ["mingling_core/default", "mingling_macros/default"] clap = ["mingling_core/clap", "mingling_macros/clap"] dispatch_tree = ["mingling_core/dispatch_tree", "mingling_macros/dispatch_tree"] +repl = ["mingling_core/repl", "mingling_macros/repl"] +comp = ["mingling_core/comp", "mingling_macros/comp"] +parser = ["dep:size"] + general_renderer = [ "mingling_core/general_renderer", "dep:serde", "mingling_macros/general_renderer", + "json_serde_fmt", ] -repl = ["mingling_core/repl", "mingling_macros/repl"] -comp = ["mingling_core/comp", "mingling_macros/comp"] -parser = ["dep:size"] + +general_renderer_empty = [ + "mingling_core/general_renderer", + "dep:serde", + "mingling_macros/general_renderer", +] + +general_renderer_full = [ + "mingling_core/general_renderer", + "dep:serde", + "mingling_macros/general_renderer", + "all_serde_fmt", +] + +all_serde_fmt = [ + "json_serde_fmt", + "yaml_serde_fmt", + "toml_serde_fmt", + "ron_serde_fmt", +] + +json_serde_fmt = ["mingling_core/json_serde_fmt"] +yaml_serde_fmt = ["mingling_core/yaml_serde_fmt"] +toml_serde_fmt = ["mingling_core/toml_serde_fmt"] +ron_serde_fmt = ["mingling_core/ron_serde_fmt"] [dependencies] mingling_core = { path = "../mingling_core", default-features = false } diff --git a/mingling/src/example_docs.rs b/mingling/src/example_docs.rs index ba61f92..d197c6b 100644 --- a/mingling/src/example_docs.rs +++ b/mingling/src/example_docs.rs @@ -445,6 +445,8 @@ pub mod example_exit_code {} /// mingling = { path = "../../mingling", features = [ /// "parser", /// "general_renderer", +/// "json_serde_fmt", +/// "yaml_serde_fmt", /// ] } /// serde = { version = "1", features = ["derive"] } /// ``` diff --git a/mingling/src/features.rs b/mingling/src/features.rs index d75f926..7d78012 100644 --- a/mingling/src/features.rs +++ b/mingling/src/features.rs @@ -51,3 +51,27 @@ pub const MINGLING_PARSER: bool = false; #[cfg(feature = "parser")] pub const MINGLING_PARSER: bool = true; + +#[cfg(not(feature = "json_serde_fmt"))] +pub const MINGLING_JSON_SERDE_FMT: bool = false; + +#[cfg(feature = "json_serde_fmt")] +pub const MINGLING_JSON_SERDE_FMT: bool = true; + +#[cfg(not(feature = "yaml_serde_fmt"))] +pub const MINGLING_YAML_SERDE_FMT: bool = false; + +#[cfg(feature = "yaml_serde_fmt")] +pub const MINGLING_YAML_SERDE_FMT: bool = true; + +#[cfg(not(feature = "toml_serde_fmt"))] +pub const MINGLING_TOML_SERDE_FMT: bool = false; + +#[cfg(feature = "toml_serde_fmt")] +pub const MINGLING_TOML_SERDE_FMT: bool = true; + +#[cfg(not(feature = "ron_serde_fmt"))] +pub const MINGLING_RON_SERDE_FMT: bool = false; + +#[cfg(feature = "ron_serde_fmt")] +pub const MINGLING_RON_SERDE_FMT: bool = true; diff --git a/mingling/src/lib.rs b/mingling/src/lib.rs index 6a165b2..4803c23 100644 --- a/mingling/src/lib.rs +++ b/mingling/src/lib.rs @@ -171,6 +171,18 @@ pub mod feature { /// Whether the `repl` feature is enabled pub use crate::features::MINGLING_REPL; + + /// Whether the `json_serde_fmt` feature is enabled + pub use crate::features::MINGLING_JSON_SERDE_FMT; + + /// Whether the `ron_serde_fmt` feature is enabled + pub use crate::features::MINGLING_RON_SERDE_FMT; + + /// Whether the `toml_serde_fmt` feature is enabled + pub use crate::features::MINGLING_TOML_SERDE_FMT; + + /// Whether the `yaml_serde_fmt` feature is enabled + pub use crate::features::MINGLING_YAML_SERDE_FMT; } mod setups; diff --git a/mingling/src/setups/general_renderer.rs b/mingling/src/setups/general_renderer.rs index a1d1f06..81b6cd0 100644 --- a/mingling/src/setups/general_renderer.rs +++ b/mingling/src/setups/general_renderer.rs @@ -31,22 +31,29 @@ impl ProgramSetup for GeneralRendererSetup where C: ProgramCollect, { + #[allow(unused_variables)] fn setup(&mut self, program: &mut Program) { + #[cfg(feature = "json_serde_fmt")] program.global_flag("--json", |p| { p.general_renderer_name = crate::GeneralRendererSetting::Json }); + #[cfg(feature = "json_serde_fmt")] program.global_flag("--json-pretty", |p| { p.general_renderer_name = crate::GeneralRendererSetting::JsonPretty; }); + #[cfg(feature = "yaml_serde_fmt")] program.global_flag("--yaml", |p| { p.general_renderer_name = crate::GeneralRendererSetting::Yaml; }); + #[cfg(feature = "toml_serde_fmt")] program.global_flag("--toml", |p| { p.general_renderer_name = crate::GeneralRendererSetting::Toml; }); + #[cfg(feature = "ron_serde_fmt")] program.global_flag("--ron", |p| { p.general_renderer_name = crate::GeneralRendererSetting::Ron; }); + #[cfg(feature = "ron_serde_fmt")] program.global_flag("--ron-pretty", |p| { p.general_renderer_name = crate::GeneralRendererSetting::RonPretty; }); -- cgit