From 932050d82212ee7db6bd4cb746fb79f40aa7cbf9 Mon Sep 17 00:00:00 2001
From: 魏曹先生 <1992414357@qq.com>
Date: Fri, 27 Feb 2026 20:25:05 +0800
Subject: Initialize project with Cargo.toml and basic structure
---
README_zh_CN.md | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
create mode 100644 README_zh_CN.md
(limited to 'README_zh_CN.md')
diff --git a/README_zh_CN.md b/README_zh_CN.md
new file mode 100644
index 0000000..35c27cc
--- /dev/null
+++ b/README_zh_CN.md
@@ -0,0 +1,80 @@
+# just_template
+
+> 只是通过模板生成代码的工具
+
+## 模板文件编写规则
+
+`just_template` 用于生成重复性代码,包含三个核心概念:`实现标记`、`实现块` 和 `参数替换`
+
+1. 实现标记
+ 用一行以 10 个连续 `>` 开头的行来标记一个“实现点”,格式为 `>>>>>>>>>> NAME`
+ 该标记用于定位,系统将提取对应名称的“实现块”内容,并在此处进行重复展开。
+
+2. 实现块
+ 用以下语法声明一个实现块,它可以定义一段可重复生成的代码模板:
+ `@@@ NAME >>>`
+ [模板内容]
+ `@@@ <<<`
+ 在实现块内部,可以使用形如 `<<>>` 的参数占位符。
+ 当通过指令(如 `insert_impl!`)为某个实现块添加具体实现时,系统会复制该块的内容,替换其中的参数,并将结果追加到对应的实现标记处
+
+3. 参数
+ - 写在实现块之外的参数会被直接进行全局替换
+ - 写在实现块之内的参数,会在为该块生成每个具体实现时,被替换为对应的值
+
+使用示例:
+
+原始模板文件内容:
+```rust
+// Auto generated
+use std::collections::HashMap;
+
+pub async fn my_func(
+ name: &str,
+ data: &[u8],
+ params: &HashMap,
+) -> Option, std::io::Error>> {
+ match name {
+>>>>>>>>>> arms
+@@@ >>> arms
+ "<<>>" => Some(<<>>::exec(data, params).await),
+@@@ <<<
+ _ => None,
+ }
+}
+```
+
+执行添加实现的指令:
+```rust
+insert_impl!("arms", crate_name = "my")
+insert_impl!("arms", crate_name = "you")
+```
+
+系统会为 `arms` 实现块生成两个具体实现,此时实现块内容变为:
+```rust
+ "my" => Some(my::exec(data, params).await),
+ "you" => Some(you::exec(data, params).await),
+```
+
+最终,模板展开生成的代码如下:
+```rust
+// Auto generated
+use std::collections::HashMap;
+
+pub async fn my_func(
+ name: &str,
+ data: &[u8],
+ params: &HashMap,
+) -> Option, std::io::Error>> {
+ match name {
+ "my" => Some(my::exec(data, params).await),
+ "you" => Some(you::exec(data, params).await),
+ _ => None,
+ }
+}
+```
+
+## 许可证
+
+本项目采用 MIT 和 Apache 2.0 双重许可。
+详见 LICENSE 文件。
--
cgit