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
71KB
1.5K SLoC
多配置解析库
Nereon配置工具,使用原生Rust。参见 nereon-models,nereon-syntax 和 libnereon 了解更多信息。
在 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