4 个版本

使用旧的 Rust 2015

0.2.3 2019 年 12 月 24 日
0.2.2 2019 年 12 月 20 日
0.2.1 2019 年 12 月 14 日
0.2.0 2019 年 12 月 13 日

#761 in 配置

MIT 许可证

2MB
15K SLoC

C 13K SLoC // 0.1% comments Rust 1K SLoC // 0.0% comments M4 427 SLoC // 0.4% comments ReScript 362 SLoC Python 212 SLoC // 0.1% comments Automake 180 SLoC Haskell 102 SLoC // 0.0% comments Shell 58 SLoC // 0.0% comments Lua 40 SLoC Bitbake 34 SLoC C++ 19 SLoC

Rust 封装在 libucl

MIT Licensed Crates.io

libucl 是一个用于解析 UCL (通用配置语言) 文件的库,此 Rust 封装库是一个围绕 libucl 的轻量级封装库。

要求

CMake 和 gcc 或 clang 等编译器。

注意:目前,远程包含支持已禁用。计划将其作为功能标志添加,因为它还需要 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 = "http://localhost";
    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 文件。

依赖项