16 个不稳定版本 (3 个破坏性更新)
0.4.1 | 2021 年 5 月 1 日 |
---|---|
0.4.0 | 2021 年 3 月 11 日 |
0.3.0 | 2021 年 1 月 12 日 |
0.2.10 | 2020 年 11 月 19 日 |
0.2.7 | 2020 年 7 月 15 日 |
#152 在 模板引擎
每月 49 次下载
用于 2 crates
53KB
834 行
guidon
guidon 基于 handlebars 模板系统进行模板处理。
用法
需要处理的文件需要有 .hbs
扩展名。文件夹和文件名也可以进行模板化: {{folder/subfolder}}
入口点是 Guidon 结构。
基本初始化
let mut guidon = Guidon::new(PathBuf::from("path/to/template/dir"));
let mut vars = BTreeMap::new();
vars.insert("key1".to_string(), "value1".to_string());
guidon.variables(vars);
guidon.apply_template("path/to/destination").unwrap();
使用此初始化
- guidon 将使用 vars 映射来查找替换值。
- guidon 将解析目录
path/to/template/dir/template
- 结果将写入
path/to/destination
TryNew 初始化
guidon 实现了 TryNew 特性,可以从目录或 git 仓库进行初始化
从路径 TryNew
let mut guidon = Guidon::try_new("path/to/template/dir").unwrap();
使用此初始化
- guidon 将从
path/to/template/dir/variables.toml
初始化替换变量 - guidon 将解析目录
path/to/template/dir/template
let mut guidon = Guidon::try_new("path/to/template/dir/my_vars.toml").unwrap();
使用此初始化
- guidon 将从
path/to/template/dir/my_vars.toml
初始化替换变量 - guidon 将解析目录
path/to/template/dir
从 CustomTemplate TryNew
Guidon 可以提供特定的模板文件和目录进行解析。
let custom = CustomTemplate {
dir_path: Path::new("path/to/template/dir"),
template_path: Path::new("path/to/my_vars.toml")
};
let mut guidon = Guidon::try_new(custom);
从 Git 仓库 TryNew
let git = GitOptions::builder()
.repo("url/to/repo")
.build()
.unwrap();
let mut guidon = Guidon::try_new(git);
使用此初始化
- guidon 将将仓库克隆到临时目录
- guidon 将从
tmp/dir/template.toml
初始化替换变量 - 在应用模板时,guidon 将解析目录
tmp/dir/template
Git仓库URL可以采用以下格式
http[s]://[user[:password]]@uri/repo[.git]
其中 user 和 password 必须包含在URL中git@uri:repo.git
。必须使用在 ssh-agent 实例中加载的密钥。
模板变量
配置文件的结构如下
# Key value pairs for template substitution
[variables]
test1 = "test 1"
test2 = "test 2"
辅助工具
replace
。它简单地用另一个字符串替换值。Tell me: {{replace my_var everybody world}}
与my_var="Hello everybody !
将渲染为Tell me: Hello world !
。append
。简单地将字符串附加到值上。Tell me: {{append my_var "and everybody !"}}
与my_var="Hello world"
将渲染为Tell me: Hello world and everybody !
。prepend
。将字符串添加到值之前。Tell me: {{prepend my_var "Sure, "}}
与my_var="hello world"
将渲染为Tell me: Sure, hello world
。up
:将值转换为大写low
:将值转换为小写default
:如果输入为null或空,则默认为给定值Tell me: {{default my_var "Oops"}}
与my_var
未定义将渲染为Tell me: Oops
encrypt
:加密数据。必须提供密钥decrypt
:解密数据
encrypt 和 decrypt 辅助工具与
crypto
功能一起提供。
回调函数
guidon提供了提供两个回调函数的可能性
- 一个变量回调函数,用于在应用模板之前对变量进行操作
- 一个渲染回调函数,如果在渲染模板时检测到缺失的值,则会调用此函数
这些回调函数可用于用户交互或默认行为。
变量回调函数
在此示例中,回调函数将向每个值添加 " cb"
。
let cb = |h: &mut BTreeMap<String, String>| {
h.iter_mut().for_each(|(_, v)| *v +=" cb");
};
let mut guidon = Guidon::new(PathBuf::from("template/path"));
guidon.set_variables_callback(cb);
渲染回调函数
在此示例中,回调函数将用键与 "-cb"
连接的值替换任何缺失的值。
// this callback will add `-cb` to the key as a value
let cb = |h: String| {
let mut s = h.clone();
s.push_str("-cb");
s
};
let mut guidon = Guidon::new(PathBuf::from("template/path"));
guidon.set_render_callback(cb);
文件和目录名称
文件名和目录也可以模板化。以下代码 Super-{{my_var}}-content.txt
将渲染为 Super-boring-content.txt
,假设 my_var="boring"
。如果文件内容是模板化的,我们将有 Super-{{my_var}}-content.txt.hbs
。//!
日志
guidon 使用日志外观。
许可证
本项目受以下任一许可证的许可:
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确声明,否则您提交给 guidon 的任何有意贡献,根据 Apache-2.0 许可证的定义,将双重许可如上所述,没有任何额外的条款或条件。
由 cargo readme
生成
依赖项
~4.5–7MB
~175K SLoC