From 0a2ef958c0dca21d19e4ffc38ba5a7c4078e182a Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Sat, 23 May 2026 23:41:04 +0800 Subject: Rework examples and add entry macro for testing --- examples/example-general-renderer/Cargo.lock | 54 ++------------------------- examples/example-general-renderer/Cargo.toml | 15 ++++---- examples/example-general-renderer/src/main.rs | 45 +++++++++++----------- 3 files changed, 32 insertions(+), 82 deletions(-) (limited to 'examples/example-general-renderer') diff --git a/examples/example-general-renderer/Cargo.lock b/examples/example-general-renderer/Cargo.lock index f0f0eea..e8de59f 100644 --- a/examples/example-general-renderer/Cargo.lock +++ b/examples/example-general-renderer/Cargo.lock @@ -2,36 +2,14 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - [[package]] name = "example-general-renderer" -version = "0.0.1" +version = "0.1.0" dependencies = [ "mingling", "serde", ] -[[package]] -name = "hashbrown" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "itoa" version = "1.0.18" @@ -67,7 +45,6 @@ dependencies = [ "just_fmt", "serde", "serde_json", - "serde_yaml", ] [[package]] @@ -98,12 +75,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - [[package]] name = "serde" version = "1.0.228" @@ -136,9 +107,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -147,19 +118,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "size" version = "0.5.0" @@ -183,12 +141,6 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "zmij" version = "1.0.21" diff --git a/examples/example-general-renderer/Cargo.toml b/examples/example-general-renderer/Cargo.toml index 4664e88..7fd4fd5 100644 --- a/examples/example-general-renderer/Cargo.toml +++ b/examples/example-general-renderer/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "example-general-renderer" -version = "0.0.1" +version = "0.1.0" edition = "2024" [dependencies] -mingling = { path = "../../mingling", features = [ - "parser", +serde = { version = "1.0.228", features = ["derive"] } + +[dependencies.mingling] +path = "../../mingling" +features = [ "general_renderer", - "json_serde_fmt", - "yaml_serde_fmt", -] } -serde = { version = "1", features = ["derive"] } + "parser", +] diff --git a/examples/example-general-renderer/src/main.rs b/examples/example-general-renderer/src/main.rs index 64d8d00..5f74815 100644 --- a/examples/example-general-renderer/src/main.rs +++ b/examples/example-general-renderer/src/main.rs @@ -1,30 +1,15 @@ -//! `Mingling` Example - General Renderer +//! Example General Renderer //! -//! ## Step1 - Enable Feature -//! Enable the `general_renderer` feature for mingling in `Cargo.toml` -//! ```toml -//! [dependencies] -//! mingling = { version = "...", features = ["general_renderer", "parser"] } -//! ``` -//! -//! ## Step2 - Add Dependencies -//! Add `serde` dependency to `Cargo.toml` for serialization support -//! ```toml -//! [dependencies] -//! serde = { version = "1", features = ["derive"] } -//! ``` +//! > This example demonstrates how to use the `general_renderer` feature to render data into structures such as json / yaml //! -//! ## Step3 - Write Code -//! Write the following content into `main.rs` -//! -//! ## Step4 - Build and Run +//! Run //! ```bash -//! cargo run --manifest-path ./examples/example-general-renderer/Cargo.toml -- render Bob 22 -//! cargo run --manifest-path ./examples/example-general-renderer/Cargo.toml -- render Bob 22 --json -//! cargo run --manifest-path ./examples/example-general-renderer/Cargo.toml -- render Bob 22 --yaml +//! 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 //! ``` //! -//! Will print: +//! Output: //! ```plain //! Bob is 22 years old //! {"member_name":"Bob","member_age":22} @@ -33,7 +18,7 @@ //! ``` use mingling::prelude::*; -use mingling::{parser::Picker, setup::GeneralRendererSetup, Groupped}; +use mingling::{Groupped, parser::Picker, setup::GeneralRendererSetup}; use serde::Serialize; dispatcher!("render", RenderCommand => RenderCommandEntry); @@ -46,7 +31,13 @@ fn main() { program.exec(); } -// Manually implement Info struct +// --------- IMPORTANT --------- +// For beautiful output structure, do not use `pack!` to wrap the types that need to be output. +// Instead, manually implement +// ____________________ Implement serde::Serialize +// / _________ Implement mingling::Groupped +// | / to ensure Mingling can recognize the type +// vvvvvvvvv vvvvvvvv #[derive(Serialize, Groupped)] struct Info { #[serde(rename = "member_name")] @@ -54,6 +45,12 @@ struct Info { #[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: RenderCommandEntry) -> Next { -- cgit