From d1a74ce57e5be72436376a829e9c7e1e7c1c561b Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Fri, 26 Jun 2026 06:27:16 +0800 Subject: refactor(general_renderer): rename to structural_renderer --- examples/example-general-renderer/Cargo.lock | 148 ----------------------- examples/example-general-renderer/Cargo.toml | 16 --- examples/example-general-renderer/page.toml | 10 -- examples/example-general-renderer/src/main.rs | 71 ----------- examples/example-pack-err/Cargo.toml | 2 +- examples/example-pack-err/page.toml | 4 +- examples/example-pack-err/src/main.rs | 10 +- examples/example-structural-renderer/Cargo.lock | 148 +++++++++++++++++++++++ examples/example-structural-renderer/Cargo.toml | 16 +++ examples/example-structural-renderer/page.toml | 10 ++ examples/example-structural-renderer/src/main.rs | 71 +++++++++++ examples/full-todolist/Cargo.toml | 2 +- examples/full-todolist/src/main.rs | 4 +- examples/test-examples.toml | 4 +- 14 files changed, 258 insertions(+), 258 deletions(-) delete mode 100644 examples/example-general-renderer/Cargo.lock delete mode 100644 examples/example-general-renderer/Cargo.toml delete mode 100644 examples/example-general-renderer/page.toml delete mode 100644 examples/example-general-renderer/src/main.rs create mode 100644 examples/example-structural-renderer/Cargo.lock create mode 100644 examples/example-structural-renderer/Cargo.toml create mode 100644 examples/example-structural-renderer/page.toml create mode 100644 examples/example-structural-renderer/src/main.rs (limited to 'examples') diff --git a/examples/example-general-renderer/Cargo.lock b/examples/example-general-renderer/Cargo.lock deleted file mode 100644 index 0919b7d..0000000 --- a/examples/example-general-renderer/Cargo.lock +++ /dev/null @@ -1,148 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example-general-renderer" -version = "0.1.0" -dependencies = [ - "mingling", - "serde", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "just_fmt" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5454cda0d57db59778608d7a47bff5b16c6705598265869fb052b657f66cf05e" - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "mingling" -version = "0.2.0" -dependencies = [ - "mingling_core", - "mingling_macros", - "serde", - "size", -] - -[[package]] -name = "mingling_core" -version = "0.2.0" -dependencies = [ - "just_fmt", - "serde", - "serde_json", -] - -[[package]] -name = "mingling_macros" -version = "0.2.0" -dependencies = [ - "just_fmt", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "size" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6709c7b6754dca1311b3c73e79fcce40dd414c782c66d88e8823030093b02b" - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/examples/example-general-renderer/Cargo.toml b/examples/example-general-renderer/Cargo.toml deleted file mode 100644 index fd7879b..0000000 --- a/examples/example-general-renderer/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "example-general-renderer" -version = "0.1.0" -edition = "2024" - -[dependencies] -serde = { version = "1.0.228", features = ["derive"] } - -[dependencies.mingling] -path = "../../mingling" -features = [ - "general_renderer", - "parser", -] - -[workspace] diff --git a/examples/example-general-renderer/page.toml b/examples/example-general-renderer/page.toml deleted file mode 100644 index 1d3e4b1..0000000 --- a/examples/example-general-renderer/page.toml +++ /dev/null @@ -1,10 +0,0 @@ -[example] -id = "example-general-renderer" -name = "General Renderer" -icon = "📤" -category = "output" -desc = """ -Demonstrates how to render structured output in JSON or YAML using `GeneralRendererSetup` and the `general_renderer` feature. -""" -tags = ["general_renderer", "--json", "--yaml"] -files = ["src/main.rs", "Cargo.toml"] diff --git a/examples/example-general-renderer/src/main.rs b/examples/example-general-renderer/src/main.rs deleted file mode 100644 index 1e02afb..0000000 --- a/examples/example-general-renderer/src/main.rs +++ /dev/null @@ -1,71 +0,0 @@ -//! Example General Renderer -//! -//! > This example demonstrates how to use the `general_renderer` feature to render data into structures such as json / yaml -//! -//! Run -//! ```bash -//! cargo run --manifest-path examples/example-general-renderer/Cargo.toml --quiet -- render Bob 22 -//! cargo run --manifest-path examples/example-general-renderer/Cargo.toml --quiet -- render Bob 22 --json -//! cargo run --manifest-path examples/example-general-renderer/Cargo.toml --quiet -- render Bob 22 --yaml -//! ``` -//! -//! Output: -//! ```plain -//! Bob is 22 years old -//! {"member_name":"Bob","member_age":22} -//! member_name: Bob -//! member_age: 22 -//! ``` - -use mingling::prelude::*; -use mingling::{parser::Picker, setup::GeneralRendererSetup, StructuralData, Groupped}; -use serde::Serialize; - -dispatcher!("render", CMDRender => EntryRender); - -fn main() { - let mut program = ThisProgram::new(); - // Add `GeneralRendererSetup` to receive user input `--json` `--yaml` parameters - program.with_setup(GeneralRendererSetup); - program.with_dispatcher(CMDRender); - let _ = program.exec(); -} - -// --------- IMPORTANT --------- -// For beautiful output structure, do not use `pack!` to wrap the types that need to be output. -// Instead, manually implement -// __________________________________ Mark as structured data so it can be rendered -// / ____________________ Implement serde::Serialize -// | / _________ Implement mingling::Groupped -// | | / to ensure Mingling can recognize the type -// vvvvvvvvvvvv vvvvvvvvv vvvvvvvv -#[derive(StructuralData, Serialize, Groupped)] -struct Info { - #[serde(rename = "member_name")] - name: String, - #[serde(rename = "member_age")] - age: i32, -} -// This will output: {"member_name":"name","member_age":32} structure - -// If using pack!(Info = (String, i32)); -// Output: {"inner":["name", 32]} - -// --------- IMPORTANT --------- - -#[chain] -fn parse_render(prev: EntryRender) -> Next { - let (name, age) = Picker::new(prev.inner) - .pick::(()) - .pick::(()) - .unpack(); - Info { name, age }.to_render() -} - -/// Implement default renderer for when general_renderer is not specified -#[renderer] -fn render_info(prev: Info) { - r_println!("{} is {} years old", prev.name, prev.age); -} - -gen_program!(); diff --git a/examples/example-pack-err/Cargo.toml b/examples/example-pack-err/Cargo.toml index 883fc89..5d61319 100644 --- a/examples/example-pack-err/Cargo.toml +++ b/examples/example-pack-err/Cargo.toml @@ -9,7 +9,7 @@ serde = { version = "1.0.228", features = ["derive"] } [dependencies.mingling] path = "../../mingling" features = [ - "general_renderer", + "structural_renderer", "extra_macros", ] diff --git a/examples/example-pack-err/page.toml b/examples/example-pack-err/page.toml index 255bbdd..37f2c31 100644 --- a/examples/example-pack-err/page.toml +++ b/examples/example-pack-err/page.toml @@ -4,7 +4,7 @@ name = "Pack an Error" icon = "🛑" category = "macros" desc = """ -Demonstrates how to use the `pack_err!` macro to define error types with automatic `name` field (snake_case at compile time) and optional `info` field. Also shows `--json` serialization when `general_renderer` is enabled. +Demonstrates how to use the `pack_err!` macro to define error types with automatic `name` field (snake_case at compile time) and optional `info` field. Also shows `--json` serialization when `structural_renderer` is enabled. """ -tags = ["pack_err!", "extra_macros", "general_renderer", "--json"] +tags = ["pack_err!", "extra_macros", "structural_renderer", "--json"] files = ["src/main.rs", "Cargo.toml"] diff --git a/examples/example-pack-err/src/main.rs b/examples/example-pack-err/src/main.rs index f859fae..8716333 100644 --- a/examples/example-pack-err/src/main.rs +++ b/examples/example-pack-err/src/main.rs @@ -2,7 +2,7 @@ //! //! > This example demonstrates how to use the `pack_err!` macro to define error types //! > with automatic `name` field (set to snake_case at compile time) and optional `info` field. -//! > Also demonstrates `--json` serialization when `general_renderer` is enabled. +//! > Also demonstrates `--json` serialization when `structural_renderer` is enabled. //! //! Run: //! ```bash @@ -27,7 +27,7 @@ //! ``` use mingling::prelude::*; -use mingling::setup::GeneralRendererSetup; +use mingling::setup::StructuralRendererSetup; use std::path::PathBuf; dispatcher!("find", CMDFind => EntryFind); @@ -45,7 +45,7 @@ dispatcher!("find-structural", CMDFindStructural => EntryFindStructural); // The typed form additionally generates `pub fn new(info)`. // name = "error_not_dir" // -// When `general_renderer` is enabled, the struct also gets +// When `structural_renderer` is enabled, the struct also gets // `#[derive(serde::Serialize)]` for --json / --yaml output. // --------- IMPORTANT --------- @@ -132,8 +132,8 @@ gen_program!(); fn main() { let mut program = ThisProgram::new(); - // Add GeneralRendererSetup to support --json / --yaml flags - program.with_setup(GeneralRendererSetup); + // Add StructuralRendererSetup to support --json / --yaml flags + program.with_setup(StructuralRendererSetup); program.with_dispatcher(CMDFind); program.with_dispatcher(CMDFindStructural); let _ = program.exec(); diff --git a/examples/example-structural-renderer/Cargo.lock b/examples/example-structural-renderer/Cargo.lock new file mode 100644 index 0000000..cee5ae3 --- /dev/null +++ b/examples/example-structural-renderer/Cargo.lock @@ -0,0 +1,148 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example-structural-renderer" +version = "0.1.0" +dependencies = [ + "mingling", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "just_fmt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5454cda0d57db59778608d7a47bff5b16c6705598265869fb052b657f66cf05e" + +[[package]] +name = "memchr" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" + +[[package]] +name = "mingling" +version = "0.2.0" +dependencies = [ + "mingling_core", + "mingling_macros", + "serde", + "size", +] + +[[package]] +name = "mingling_core" +version = "0.2.0" +dependencies = [ + "just_fmt", + "serde", + "serde_json", +] + +[[package]] +name = "mingling_macros" +version = "0.2.0" +dependencies = [ + "just_fmt", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "size" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6709c7b6754dca1311b3c73e79fcce40dd414c782c66d88e8823030093b02b" + +[[package]] +name = "syn" +version = "2.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/examples/example-structural-renderer/Cargo.toml b/examples/example-structural-renderer/Cargo.toml new file mode 100644 index 0000000..2090166 --- /dev/null +++ b/examples/example-structural-renderer/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "example-structural-renderer" +version = "0.1.0" +edition = "2024" + +[dependencies] +serde = { version = "1.0.228", features = ["derive"] } + +[dependencies.mingling] +path = "../../mingling" +features = [ + "structural_renderer", + "parser", +] + +[workspace] diff --git a/examples/example-structural-renderer/page.toml b/examples/example-structural-renderer/page.toml new file mode 100644 index 0000000..0ed7745 --- /dev/null +++ b/examples/example-structural-renderer/page.toml @@ -0,0 +1,10 @@ +[example] +id = "example-structural-renderer" +name = "structural renderer" +icon = "📤" +category = "output" +desc = """ +Demonstrates how to render structured output in JSON or YAML using `StructuralRendererSetup` and the `structural_renderer` feature. +""" +tags = ["structural_renderer", "--json", "--yaml"] +files = ["src/main.rs", "Cargo.toml"] diff --git a/examples/example-structural-renderer/src/main.rs b/examples/example-structural-renderer/src/main.rs new file mode 100644 index 0000000..21077e7 --- /dev/null +++ b/examples/example-structural-renderer/src/main.rs @@ -0,0 +1,71 @@ +//! Example structural renderer +//! +//! > This example demonstrates how to use the `structural_renderer` feature to render data into structures such as json / yaml +//! +//! Run +//! ```bash +//! cargo run --manifest-path examples/example-structural-renderer/Cargo.toml --quiet -- render Bob 22 +//! cargo run --manifest-path examples/example-structural-renderer/Cargo.toml --quiet -- render Bob 22 --json +//! cargo run --manifest-path examples/example-structural-renderer/Cargo.toml --quiet -- render Bob 22 --yaml +//! ``` +//! +//! Output: +//! ```plain +//! Bob is 22 years old +//! {"member_name":"Bob","member_age":22} +//! member_name: Bob +//! member_age: 22 +//! ``` + +use mingling::prelude::*; +use mingling::{parser::Picker, setup::StructuralRendererSetup, StructuralData, Groupped}; +use serde::Serialize; + +dispatcher!("render", CMDRender => EntryRender); + +fn main() { + let mut program = ThisProgram::new(); + // Add `StructuralRendererSetup` to receive user input `--json` `--yaml` parameters + program.with_setup(StructuralRendererSetup); + program.with_dispatcher(CMDRender); + let _ = program.exec(); +} + +// --------- IMPORTANT --------- +// For beautiful output structure, do not use `pack!` to wrap the types that need to be output. +// Instead, manually implement +// __________________________________ Mark as structured data so it can be rendered +// / ____________________ Implement serde::Serialize +// | / _________ Implement mingling::Groupped +// | | / to ensure Mingling can recognize the type +// vvvvvvvvvvvv vvvvvvvvv vvvvvvvv +#[derive(StructuralData, Serialize, Groupped)] +struct Info { + #[serde(rename = "member_name")] + name: String, + #[serde(rename = "member_age")] + age: i32, +} +// This will output: {"member_name":"name","member_age":32} structure + +// If using pack!(Info = (String, i32)); +// Output: {"inner":["name", 32]} + +// --------- IMPORTANT --------- + +#[chain] +fn parse_render(prev: EntryRender) -> Next { + let (name, age) = Picker::new(prev.inner) + .pick::(()) + .pick::(()) + .unpack(); + Info { name, age }.to_render() +} + +/// Implement default renderer for when structural_renderer is not specified +#[renderer] +fn render_info(prev: Info) { + r_println!("{} is {} years old", prev.name, prev.age); +} + +gen_program!(); diff --git a/examples/full-todolist/Cargo.toml b/examples/full-todolist/Cargo.toml index 50b11a5..e10f0e7 100644 --- a/examples/full-todolist/Cargo.toml +++ b/examples/full-todolist/Cargo.toml @@ -12,7 +12,7 @@ path = "../../mingling" features = [ "parser", "extra_macros", - "general_renderer", + "structural_renderer", ] [workspace] diff --git a/examples/full-todolist/src/main.rs b/examples/full-todolist/src/main.rs index 7f958d4..e4c5aa6 100644 --- a/examples/full-todolist/src/main.rs +++ b/examples/full-todolist/src/main.rs @@ -10,7 +10,7 @@ use mingling::{ macros::route, prelude::*, res::ResExitCode, - setup::{ExitCodeSetup, GeneralRendererSetup, HelpFlagSetup}, + setup::{ExitCodeSetup, StructuralRendererSetup, HelpFlagSetup}, LazyInit, LazyRes, }; @@ -49,7 +49,7 @@ fn main() { // Setups program.with_setup(ExitCodeSetup::default()); - program.with_setup(GeneralRendererSetup); + program.with_setup(StructuralRendererSetup); program.with_setup(HelpFlagSetup::new(["--help", "-h"])); // Flags diff --git a/examples/test-examples.toml b/examples/test-examples.toml index 149f2c6..b4cbb6d 100644 --- a/examples/test-examples.toml +++ b/examples/test-examples.toml @@ -138,12 +138,12 @@ command = "lang-select OCaml" expect.exit-code = 0 expect.result = "Selected: OCaml" -[[test.example-general-renderer]] +[[test.example-structural-renderer]] command = "render Bob 22" expect.exit-code = 0 expect.result = "Bob is 22 years old" -[[test.example-general-renderer]] +[[test.example-structural-renderer]] command = "render Bob 22 --json" expect.exit-code = 0 expect.result = "{\"member_name\":\"Bob\",\"member_age\":22}" -- cgit