2个版本
0.1.1 | 2021年9月13日 |
---|---|
0.1.0 | 2020年3月25日 |
#280 in 配置
275KB
6.5K SLoC
CFG配置格式是一种类似于JSON的文本格式,是JSON的超集。它始于2008年首次宣布之前,具有以下目标
- 允许具有键值映射和列表支持的分层配置方案。
- 支持配置文件中不同部分之间的交叉引用。
- 提供字符串插值功能,以便轻松地从其他配置值构建配置值。
- 提供组合配置的能力(使用包含和合并功能)。
- 在平台支持的情况下,提供安全访问真实应用程序对象的能力。
- 完全声明式。
它克服了JSON作为配置格式时的一些缺点
- JSON比必要的更冗长。
- JSON不允许注释。
- JSON不提供对日期和多行字符串的一等支持。
- JSON不允许列表和映射中存在尾随逗号。
- JSON不提供轻松的交叉引用、插值或组合。
一个简单的例子
使用以下配置文件,例如 test0.cfg
a: 'Hello, '
b: 'world!'
c: {
d: 'e'
}
'f.g': 'h'
christmas_morning: `2019-12-25 08:39:49`
home: `$HOME`
foo: `$FOO|bar`
您可以使用,例如 the evcxr REPL 加载和查询上述配置
$ evcxr
>> :dep cfg-lib
>> use cfg_lib::*;
加载配置
上述配置可以按以下方式加载。在REPL壳中
>> let cfg = Config::from_file("test0.cfg").unwrap();
成功的 from_file()
调用返回一个 Config
实例,可用于查询配置。
使用键访问元素
使用简单键访问配置的元素并不比使用 HashMap
更困难
>> cfg.get("a")
Ok(Base(String("Hello, ")))
>> cfg.get("b")
Ok(Base(String("world!")))
返回的值类型为 Value。
使用路径访问元素
除了简单的键,还可以使用路径字符串访问元素。
>> cfg.get("c.d")
Ok(Base(String("e")))
在这里,所需的值通过(在幕后)遍历路径 c.d
在一步中获取 – 首先获取键 c
的映射,然后在结果映射中获取 d
的值。
注意,你可以有看起来像路径的简单键。
>> cfg.get("f.g")
Ok(Base(String("h")))
如果给定的键存在于配置中,则将其用作键,如果它不在配置中,则尝试将其解释为路径。因此,f.g
存在并通过键访问,而 c.d
不是一个现有键,因此解释为路径。
日期/时间对象的访问
您还可以通过在反引号字符串中使用 ISO 日期/时间模式从配置中获取本地 Rust 日期/时间对象。
>> cfg.get("christmas_morning")
Ok(Base(DateTime(2019-12-25T08:39:49+00:00)))
如果您仅指定日期部分,则获取 NaiveDate 对象;如果您还指定了时间组件,则获取 DateTime 对象。如果没有指定偏移量,则假定它为零。
访问环境变量
要访问环境变量,请使用以下形式的反引号字符串:$VARNAME
>> cfg.get("home")
Ok(Base(String("/home/vinay")))
您可以使用 $VARNAME|default-value
形式指定一个默认值,如果环境变量不存在则使用该值。如果 VARNAME 不是一个环境变量中的变量,则返回管道字符后面的任何字符串(包括空字符串)。
>> cfg.get("foo")
Ok(Base(String("bar")))
有关更多信息,请参阅CFG 文档。
依赖关系
~3–4.5MB
~76K SLoC