18 个不稳定版本 (7 个重大变化)
0.9.0 | 2022年4月25日 |
---|---|
0.7.0 | 2021年11月10日 |
0.5.2 | 2021年5月19日 |
0.5.1 | 2021年3月10日 |
0.3.0 | 2019年3月7日 |
#16 in #strict
每月757次下载
用于 11 个软件包 (8 个直接使用)
180KB
4K SLoC
HOCON.rs
主分支的 API 文档发布 在此。
遵循 HOCON 规范 使用 Rust 解析 HOCON 配置文件。
此实现的目的是尽可能宽容,返回一个有效的文档,所有错误都封装在 Hocon::BadValue
中。可以通过启用 strict
模式来返回遇到的第一个 Error
。
示例
使用 serde 解析字符串到结构体
use serde::Deserialize;
#[derive(Deserialize)]
struct Configuration {
host: String,
port: u8,
auto_connect: bool,
}
fn main() -> Result<(), Error> {
let s = r#"{
host: 127.0.0.1
port: 80
auto_connect: false
}"#;
let conf: Configuration = hocon::de::from_str(s)?;
Ok(())
}
从字符串读取并直接获取值
use hocon::HoconLoader;
fn main() -> Result<(), Error> {
let s = r#"{ a: 7 }"#;
let doc = HoconLoader::new()
.load_str(s)?
.hocon()?;
let a = doc["a"].as_i64();
assert_eq!(a, Some(7));
Ok(())
}
使用 serde
将值反序列化为结构体
use serde::Deserialize;
use hocon::HoconLoader;
#[derive(Deserialize)]
struct Configuration {
host: String,
port: u8,
auto_connect: bool,
}
fn main() -> Result<(), Error> {
let s = r#"{
host: 127.0.0.1
port: 80
auto_connect: false
}"#;
let conf: Configuration = HoconLoader::new()
.load_str(s)?
.resolve()?;
Ok(())
}
从文件读取
use hocon::HoconLoader;
fn main() -> Result<(), Error> {
let doc = HoconLoader::new()
.load_file("tests/data/basic.conf")?
.hocon()?;
let a = doc["a"].as_i64();
assert_eq!(a, Some(5));
Ok(())
}
从多个文档读取
use hocon::HoconLoader;
fn main() -> Result<(), Error> {
let s = r#"{
a: will be changed
unchanged: original value
}"#;
let doc = HoconLoader::new()
.load_str(s)?
.load_file("tests/data/basic.conf")?
.hocon()?;
let a = doc["a"].as_i64();
assert_eq!(a, Some(5));
let unchanged = doc["unchanged"].as_string();
assert_eq!(unchanged, Some(String::from("original value")));
Ok(())
}
特性
默认启用所有特性。可以禁用它们以减少依赖。
url-support
此特性启用使用 include url("http://mydomain.com/myfile.conf")
从包含中获取 URL (参见 规范)。如果禁用,包含将只加载使用 include "path/to/file.conf"
或 include file("path/to/file.conf")
指定的本地文件。
serde-support
此特性启用使用 serde
将值反序列化为实现 Deserialize
的 struct
。
use serde::Deserialize;
use hocon::HoconLoader;
#[derive(Deserialize)]
struct Configuration {
host: String,
port: u8,
auto_connect: bool,
}
# fn main() -> Result<(), Error> {
let s = r#"{host: 127.0.0.1, port: 80, auto_connect: false}"#;
# #[cfg(feature = "serde-support")]
let conf: Configuration = HoconLoader::new().load_str(s)?.resolve()?;
# Ok(())
# }
规范覆盖率
https://github.com/lightbend/config/blob/master/HOCON.md
- 解析JSON
- 注释
- 省略根花括号
- 键值分隔符
- 如果存在换行符,逗号是可选的
- 空白字符
- 重复键和对象合并
- 未引用的字符串
- 多行字符串
- 值连接
- 对象连接
- 数组连接
- 路径表达式
- 路径作为键
- 替换
- 包含
- 将数字索引的对象转换为数组
- 允许包含文件的URL
- 持续时间单位格式
- 周期单位格式
- 大小单位格式
依赖
~7–23MB
~316K SLoC