5个版本
使用旧的Rust 2015
0.1.4 | 2015年7月12日 |
---|---|
0.1.3 | 2015年5月27日 |
0.1.2 | 2015年5月26日 |
0.1.1 | 2015年5月26日 |
0.1.0 | 2015年5月26日 |
#71 in #universal
25 每月下载量
20KB
435 行代码(不包括注释)
Rust对libucl的包装
用法
extern crate ucl;
use ucl::Parser;
let parser = Parser::new();
let result = parser.parse(r#"name = "mort";
section {
nice = true;
server = "https://127.0.0.1:6666";
chunk = 1Gb;
}"#).unwrap();
println!("{}", result.fetch_path("section.nice").and_then(|v| v.as_bool()));
许可证
查看LICENSE文件。
lib.rs
:
UCL (通用配置库)
这个库是UCL文件的解析器。
基本结构
UCL支持两种不同的语法
-
JSON
{ "param": "value", "section": { "flag": true, "number": 10000, "subsection": { "hosts": [ { "host": "localhost", "port": 9000 }, { "host": "remotehost", "port": 9090 } } } }
-
类似nginx的UCL
param = value; section { flag = true; number = 10k; subsection { hosts = { host = "localhost"; port = 9000 } hosts = { host = "remotehost" port = 9090 } } }
UCL和JSON之间的区别
- 最外层的花括号是可选的,所以
{"a": "b"}
等同于"a": "b"
- 键和字符串上的引号是可选的
:
可以替换为=
或甚至可以省略对象- 逗号可以替换为分号
- 允许尾随逗号
- 自动创建数组 - 对象中的非唯一键是允许的,并且会自动转换为数组
解析器用法
简单示例
static DOC: &'static str = r#"
param = value;
section {
flag = true;
number = 10k;
subsection {
hosts = {
host = "localhost";
port = 9000
}
hosts = {
host = "remotehost"
port = 9090
}
}
}
"#;
let parser = ucl::Parser::new();
let document = parser.parse(DOC).unwrap();
assert_eq!(document.fetch("param").unwrap().as_string(), Some("value".to_string()));
依赖项
~150KB