20个版本 (5个重大变化)

使用旧的Rust 2015

0.6.0 2018年10月23日
0.4.4 2018年10月20日
0.1.8 2018年7月11日

#1588 in 数据结构


用于 3 crates

BSD-2-Clause

71KB
1.5K SLoC

多配置解析库

Nereon配置工具,使用原生Rust。参见 nereon-modelsnereon-syntaxlibnereon 了解更多信息。

noc 中包含一个NOC游乐场应用程序。它生成一个简单的2面板网页,左侧可编辑NOC,右侧显示解析结果。要运行此应用程序,请使用类似以下内容

git clone [email protected]:riboseinc/rust-nereon.git
cd rust-nereon
cargo build --manifest-path=noc/Cargo.toml
./target/debug/noc -p 8042

并将浏览器指向 http://127.0.0.1:8042

文档

网站


lib.rs:

使用 nereon 进行应用程序配置和选项解析。

使用 NOC 语法编写的配置可以由 Value 使用 parse_noc 函数解析。

extern crate nereon;
use nereon::{parse_noc, Value};
use std::collections::HashMap;

let noc = r#"
    user admin {
        uid 1000
        name "John Doe"
    }"#;

let expected = Value::Table(HashMap::new())
    .insert(vec!["user", "admin", "uid"], Value::from("1000"))
    .insert(vec!["user", "admin", "name"], Value::from("John Doe"));

assert_eq!(parse_noc::<Value>(noc), Ok(expected));

可以使用 nereon-derive 包将 Nereon Value 转换为其他类型

extern crate nereon;
use nereon::{parse_noc, Value};

let noc = r#"
    user admin {
        uid 1000 + 10
        name "John Doe"
    }"#;

let expected = r#""user" {"admin" {"name" "John Doe","uid" "1010"}}"#
    .to_owned();

assert_eq!(parse_noc::<Value>(noc).map(|v| v.as_noc_string()), Ok(expected));

使用 FromValue trait。

#[macro_use]
extern crate nereon_derive;
extern crate nereon;
use nereon::{parse_noc, NocError, ConversionError, FromValue, Value};

#[derive(FromValue, PartialEq, Debug)]
struct User {
    uid: u32,
    name: String,
}

let noc = r#"
    uid 1000 + 10
    name "John Doe"
"#;

let expected = User { uid: 1010, name: "John Doe".to_owned() };
let user = parse_noc::<User>(noc);
assert_eq!(user, Ok(expected));

Nereon 还可用于解析命令行。命令行选项使用 NOC 语法中的 NOS 配置进行描述。命令行参数插入到生成的 Value 中。NOS 接受环境变量作为选项默认值,并且可以选择从配置文件中加载更多默认值。

use nereon::{configure, parse_noc, Value, FromValue};
use std::collections::HashMap;

let nos = r#"
    name "Nereon test"
    authors ["John Doe <[email protected]>"]
    license Free
    version "0.0.1"
    option config {
        env nereon_config
        usage "Config file"
        key []
    }
    option user {
        short u
        key [user, admin, uid]
        usage "User's UID"
        hint USER
    }
    option permissions {
        env nereon_permissions
        key [user, admin, permissions]
        usage "Permissions for user"
    }"#;

// create an example NOC config file and environment variables
::std::fs::write("/tmp/nereon_test", "user admin permissions read").unwrap();
::std::env::set_var("nereon_config", "/tmp/nereon_test");
::std::env::set_var("nereon_permissions", "read,write");

let expected = parse_noc::<Value>(r#"
    user admin uid 100
    user admin permissions "read,write""#
).unwrap();

assert_eq!(configure::<Value, _, _>(&nos, &["program", "-u", "100"]), Ok(expected));

依赖项

~5MB
~93K SLoC