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

MIT/Apache

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] 其中 userpassword 必须包含在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:解密数据

encryptdecrypt 辅助工具与 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 使用日志外观。

许可证

本项目受以下任一许可证的许可:

任您选择。

贡献

除非您明确声明,否则您提交给 guidon 的任何有意贡献,根据 Apache-2.0 许可证的定义,将双重许可如上所述,没有任何额外的条款或条件。


cargo readme 生成

依赖项

~4.5–7MB
~175K SLoC