aboutsummaryrefslogtreecommitdiff
path: root/just_template/src/lib.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-29 03:34:41 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-29 03:34:41 +0800
commitba15b7c06468cb6c52c8d2a53419fd83f9ebcb8b (patch)
treecdaa1c71585d10dd73945cefe95f2c25f27924ed /just_template/src/lib.rs
parentff70307869a547b13850d1eec3f72e8ca3bca265 (diff)
refactor: promote project to workspace with macros sub-crate
Diffstat (limited to 'just_template/src/lib.rs')
-rw-r--r--just_template/src/lib.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/just_template/src/lib.rs b/just_template/src/lib.rs
new file mode 100644
index 0000000..7ff77f5
--- /dev/null
+++ b/just_template/src/lib.rs
@@ -0,0 +1,58 @@
+//! Template struct for storing template strings and their parameters.
+//!
+//! The template supports two types of parameters:
+//! - Simple parameters: key-value pairs used to replace simple placeholders (`<<<key>>>` format) in the template.
+//! - Implementation parameters: for implementation blocks (`>>>>>>>>> block_name` and `@@@ >>> block_name` format),
+//! can contain multiple parameter sets, each corresponding to an implementation instance.
+//!
+//! # Examples
+//! ```
+//! use just_template::Template;
+//!
+//! let mut tmpl = Template::from("Hello, <<<name>>>!".to_string());
+//! tmpl.insert_param("name".to_string(), "World".to_string());
+//! assert_eq!(tmpl.to_string(), "Hello, World!");
+//! ```
+//!
+//! Using the `tmpl_param!` macro makes it easier to add simple parameters:
+//! ```
+//! use just_template::{Template, tmpl_param};
+//!
+//! let mut tmpl = Template::from("<<<a>>> + <<<b>>> = <<<c>>>".to_string());
+//! tmpl_param!(tmpl, a = 1, b = 2, c = 3);
+//! assert_eq!(tmpl.to_string(), "1 + 2 = 3");
+//! ```
+//!
+//! Using the `tmpl!` macro adds implementation block parameters:
+//! ```
+//! use just_template::{Template, tmpl};
+//!
+//! let mut tmpl = Template::from("
+//! >>>>>>>>>> arms
+//! @@@ >>> arms
+//! <<<crate_name>>> => Some(<<<crate_name>>>::exec(data, params).await),
+//! @@@ <<<
+//! ".trim().to_string());
+//! tmpl!(tmpl,
+//! arms {
+//! crate_name = "my",
+//! crate_name = "you",
+//! }
+//! );
+//! // Output the expanded template
+//! let expanded = tmpl.to_string();
+//! assert_eq!(expanded, "
+//! my => Some(my::exec(data, params).await),
+//! you => Some(you::exec(data, params).await),
+//! ".trim().to_string());
+//! ```
+mod template;
+pub use template::*; // Re-export template to just_template
+
+pub mod expand;
+
+#[cfg(test)]
+pub mod test;
+
+#[deprecated]
+pub mod deprecated;