diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-05-16 00:07:59 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-05-16 00:09:55 +0800 |
| commit | a127d6f3cf2741d4dc404959c5481fa61651e133 (patch) | |
| tree | ec82ed1260e5a3d5744f2181b79d21ffb65e54e8 /mingling_core | |
| parent | aae29170dc7ae7a8976699c4d1f7011f9f238a06 (diff) | |
Refactor general_renderer into granular format-specific features
Diffstat (limited to 'mingling_core')
| -rw-r--r-- | mingling_core/Cargo.toml | 13 | ||||
| -rw-r--r-- | mingling_core/src/program/config.rs | 18 | ||||
| -rw-r--r-- | mingling_core/src/program/exec.rs | 2 | ||||
| -rw-r--r-- | mingling_core/src/renderer/general.rs | 13 |
4 files changed, 39 insertions, 7 deletions
diff --git a/mingling_core/Cargo.toml b/mingling_core/Cargo.toml index 118813c..84b974b 100644 --- a/mingling_core/Cargo.toml +++ b/mingling_core/Cargo.toml @@ -13,13 +13,12 @@ async = [] builds = ["dep:dirs"] dispatch_tree = [] -general_renderer = [ - "dep:serde", - "dep:ron", - "dep:serde_json", - "dep:serde_yaml", - "dep:toml", -] +general_renderer = ["dep:serde"] +ron_serde_fmt = ["dep:ron"] +json_serde_fmt = ["dep:serde_json"] +yaml_serde_fmt = ["dep:serde_yaml"] +toml_serde_fmt = ["dep:toml"] + repl = [] clap = [] diff --git a/mingling_core/src/program/config.rs b/mingling_core/src/program/config.rs index c3b1b0e..b5b46a0 100644 --- a/mingling_core/src/program/config.rs +++ b/mingling_core/src/program/config.rs @@ -71,16 +71,22 @@ pub enum GeneralRendererSetting { #[default] Disable, /// Render output as compact JSON. + #[cfg(feature = "json_serde_fmt")] Json, /// Render output as pretty-printed JSON. + #[cfg(feature = "json_serde_fmt")] JsonPretty, /// Render output as YAML. + #[cfg(feature = "yaml_serde_fmt")] Yaml, /// Render output as TOML. + #[cfg(feature = "toml_serde_fmt")] Toml, /// Render output as RON. + #[cfg(feature = "ron_serde_fmt")] Ron, /// Render output as pretty-printed RON. + #[cfg(feature = "ron_serde_fmt")] RonPretty, } @@ -91,11 +97,17 @@ impl std::str::FromStr for GeneralRendererSetting { fn from_str(s: &str) -> Result<Self, Self::Err> { match just_fmt::kebab_case!(s).as_str() { "disable" => Ok(GeneralRendererSetting::Disable), + #[cfg(feature = "json_serde_fmt")] "json" => Ok(GeneralRendererSetting::Json), + #[cfg(feature = "json_serde_fmt")] "json-pretty" => Ok(GeneralRendererSetting::JsonPretty), + #[cfg(feature = "yaml_serde_fmt")] "yaml" => Ok(GeneralRendererSetting::Yaml), + #[cfg(feature = "toml_serde_fmt")] "toml" => Ok(GeneralRendererSetting::Toml), + #[cfg(feature = "ron_serde_fmt")] "ron" => Ok(GeneralRendererSetting::Ron), + #[cfg(feature = "ron_serde_fmt")] "ron-pretty" => Ok(GeneralRendererSetting::RonPretty), _ => Err(format!("Invalid renderer: '{}'", s)), } @@ -121,11 +133,17 @@ impl std::fmt::Display for GeneralRendererSetting { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { GeneralRendererSetting::Disable => write!(f, "disable"), + #[cfg(feature = "json_serde_fmt")] GeneralRendererSetting::Json => write!(f, "json"), + #[cfg(feature = "json_serde_fmt")] GeneralRendererSetting::JsonPretty => write!(f, "json-pretty"), + #[cfg(feature = "yaml_serde_fmt")] GeneralRendererSetting::Yaml => write!(f, "yaml"), + #[cfg(feature = "toml_serde_fmt")] GeneralRendererSetting::Toml => write!(f, "toml"), + #[cfg(feature = "ron_serde_fmt")] GeneralRendererSetting::Ron => write!(f, "ron"), + #[cfg(feature = "ron_serde_fmt")] GeneralRendererSetting::RonPretty => write!(f, "ron-pretty"), } } diff --git a/mingling_core/src/program/exec.rs b/mingling_core/src/program/exec.rs index c5ba628..7f7aee4 100644 --- a/mingling_core/src/program/exec.rs +++ b/mingling_core/src/program/exec.rs @@ -278,6 +278,7 @@ fn render<C: ProgramCollect<Enum = C>>(program: &Program<C>, any: AnyOutput<C>) } #[cfg(feature = "general_renderer")] { + #[allow(unreachable_patterns)] match program.general_renderer_name { super::GeneralRendererSetting::Disable => { let mut render_result = RenderResult::default(); @@ -303,6 +304,7 @@ fn render_help<C: ProgramCollect<Enum = C>>( } #[cfg(feature = "general_renderer")] { + #[allow(unreachable_patterns)] match program.general_renderer_name { super::GeneralRendererSetting::Disable => { let mut render_result = RenderResult::default(); diff --git a/mingling_core/src/renderer/general.rs b/mingling_core/src/renderer/general.rs index 3808e5a..7d07bac 100644 --- a/mingling_core/src/renderer/general.rs +++ b/mingling_core/src/renderer/general.rs @@ -15,6 +15,7 @@ pub struct GeneralRenderer; impl GeneralRenderer { // Renders data in the specified format to the given RenderResult. + #[allow(unused_variables)] pub fn render<T: Serialize + Send>( data: &T, setting: &GeneralRendererSetting, @@ -22,16 +23,23 @@ impl GeneralRenderer { ) -> Result<(), GeneralRendererSerializeError> { match setting { GeneralRendererSetting::Disable => Ok(()), + #[cfg(feature = "json_serde_fmt")] GeneralRendererSetting::Json => Self::render_to_json(data, r), + #[cfg(feature = "json_serde_fmt")] GeneralRendererSetting::JsonPretty => Self::render_to_json_pretty(data, r), + #[cfg(feature = "yaml_serde_fmt")] GeneralRendererSetting::Yaml => Self::render_to_yaml(data, r), + #[cfg(feature = "toml_serde_fmt")] GeneralRendererSetting::Toml => Self::render_to_toml(data, r), + #[cfg(feature = "ron_serde_fmt")] GeneralRendererSetting::Ron => Self::render_to_ron(data, r), + #[cfg(feature = "ron_serde_fmt")] GeneralRendererSetting::RonPretty => Self::render_to_ron_pretty(data, r), } } /// Serializes data to JSON format and writes it to the render result. + #[cfg(feature = "json_serde_fmt")] pub fn render_to_json<T: Serialize + Send>( data: &T, r: &mut RenderResult, @@ -43,6 +51,7 @@ impl GeneralRenderer { } /// Serializes data to pretty-printed JSON format and writes it to the render result. + #[cfg(feature = "json_serde_fmt")] pub fn render_to_json_pretty<T: Serialize + Send>( data: &T, r: &mut RenderResult, @@ -54,6 +63,7 @@ impl GeneralRenderer { } /// Serializes data to RON format and writes it to the render result. + #[cfg(feature = "ron_serde_fmt")] pub fn render_to_ron<T: Serialize + Send>( data: &T, r: &mut RenderResult, @@ -65,6 +75,7 @@ impl GeneralRenderer { } /// Serializes data to pretty-printed RON format and writes it to the render result. + #[cfg(feature = "ron_serde_fmt")] pub fn render_to_ron_pretty<T: Serialize + Send>( data: &T, r: &mut RenderResult, @@ -80,6 +91,7 @@ impl GeneralRenderer { } /// Serializes data to TOML format and writes it to the render result. + #[cfg(feature = "toml_serde_fmt")] pub fn render_to_toml<T: Serialize + Send>( data: &T, r: &mut RenderResult, @@ -91,6 +103,7 @@ impl GeneralRenderer { } /// Serializes data to YAML format and writes it to the render result. + #[cfg(feature = "yaml_serde_fmt")] pub fn render_to_yaml<T: Serialize + Send>( data: &T, r: &mut RenderResult, |
