aboutsummaryrefslogtreecommitdiff
path: root/examples/example-general-renderer
diff options
context:
space:
mode:
Diffstat (limited to 'examples/example-general-renderer')
-rw-r--r--examples/example-general-renderer/Cargo.lock54
-rw-r--r--examples/example-general-renderer/Cargo.toml15
-rw-r--r--examples/example-general-renderer/src/main.rs45
3 files changed, 32 insertions, 82 deletions
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
@@ -3,36 +3,14 @@
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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -67,7 +45,6 @@ dependencies = [
"just_fmt",
"serde",
"serde_json",
- "serde_yaml",
]
[[package]]
@@ -99,12 +76,6 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -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",
@@ -148,19 +119,6 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -184,12 +142,6 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
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 {