aboutsummaryrefslogtreecommitdiff
path: root/mingling_core
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-05-16 00:07:59 +0800
committer魏曹先生 <1992414357@qq.com>2026-05-16 00:09:55 +0800
commita127d6f3cf2741d4dc404959c5481fa61651e133 (patch)
treeec82ed1260e5a3d5744f2181b79d21ffb65e54e8 /mingling_core
parentaae29170dc7ae7a8976699c4d1f7011f9f238a06 (diff)
Refactor general_renderer into granular format-specific features
Diffstat (limited to 'mingling_core')
-rw-r--r--mingling_core/Cargo.toml13
-rw-r--r--mingling_core/src/program/config.rs18
-rw-r--r--mingling_core/src/program/exec.rs2
-rw-r--r--mingling_core/src/renderer/general.rs13
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,