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 每月下载量

MIT 许可证

20KB
435 行代码(不包括注释)

Rust对libucl的包装

Build Status

用法

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