3个版本
使用旧的Rust 2015
0.2.2 | 2019年12月24日 |
---|---|
0.2.1 | 2019年12月20日 |
0.2.0 | 2019年12月12日 |
#2621 在 解析器实现
37 每月下载次数
用于 libucl
2MB
14K SLoC
包含 (神秘的autoconf代码,6KB) libucl/configure.ac
Rust围绕libucl的包装器
在Rust中围绕libucl的轻量级包装库,libucl是一个用于解析UCL(通用配置语言)文件的库。
要求
CMake和像gcc或clang这样的C/C++编译器。
注意:目前,远程包含的支持已禁用。计划将其作为功能标志添加,因为它还需要libcurl / libfetch。
平台支持
Linux / Mac OS
libucl在Windows上可构建,但目前尚未进行测试。
基础知识
您可以在这里了解有关UCL(通用配置语言)的所有信息
用法
use libucl::Parser;
let parser = Parser::new();
let result = parser.parse(r#"tag = "svc";
upstream {
h2c = true;
host = "https://127.0.0.1";
port = 9090;
connect_timeout = 1s;
}"#).unwrap();
println!("{}", result.fetch_path("upstream.h2c").and_then(|v| v.as_bool()));
验证
您可以使用UCL格式编写验证模式,只要它遵循JSON Schema规则定义模式,除了远程引用。UCL目前对验证模式本身并不绝对严格,因此UCL用户应提供有效的模式(如json-schema draft v4中定义的那样),以确保输入对象得到适当的验证。
use libucl::Parser;
let parser = Parser::new();
let item = parser.parse(r#"
{
"key": "some string"
}"#
).unwrap();
let parser = Parser::new();
let schema = parser.parse(r#"
{
"type": "object",
"properties":{
"key": {
"type":"string"
}
}
}"#
).unwrap();
let res = item.validate_with_schema(&schema);
assert_eq!(res.is_ok(), true);
对象转储
可以将对象转储到JSON、JSON紧凑、YAML和Config格式
let parser = Parser::new();
let result = parser.parse(r#"section {
flag = true;
number = 10k;
subsection {
hosts = {
host = "localhost";
port = 9000
}
hosts = {
host = "remotehost"
port = 9090
}
}
}"#).unwrap();
let regex = Regex::new("\"flag\":true").unwrap();
let val = result.dump_into(Emitter::JSONCompact);
assert_eq!(regex.is_match(val.as_str()), true);
UCL工具
使用UCL工具,您可以转换输入文件到指定的格式。工具的输入和输出文件默认为stdin和stdout,因此您可以在管道中使用它们。您还可以指定模式文件并执行验证。
USAGE:
ucltool [OPTIONS] [help]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-f, --format <format> Specify the output format [default: ucl] [possible values: ucl, json, json_compact, yaml,
msgpack]
-i, --in <INFILE> Specify input filename path (defaults to standard input)
-o, --out <OUTFILE> Specify output filename path(defaults to standard output)
-s, --schema <SCHEMA> Specify schema file path to perform validation
ARGS:
<help> print this message and exit
许可证
查看LICENSE文件。