aboutsummaryrefslogtreecommitdiff
path: root/mingling
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
parentaae29170dc7ae7a8976699c4d1f7011f9f238a06 (diff)
Refactor general_renderer into granular format-specific features
Diffstat (limited to 'mingling')
-rw-r--r--mingling/Cargo.toml33
-rw-r--r--mingling/src/example_docs.rs2
-rw-r--r--mingling/src/features.rs24
-rw-r--r--mingling/src/lib.rs12
-rw-r--r--mingling/src/setups/general_renderer.rs7
5 files changed, 75 insertions, 3 deletions
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<C> ProgramSetup<C> for GeneralRendererSetup
where
C: ProgramCollect<Enum = C>,
{
+ #[allow(unused_variables)]
fn setup(&mut self, program: &mut Program<C>) {
+ #[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;
});