26 个版本 (16 个稳定版本)

5.4.0 2024年3月21日
5.3.0 2022年4月8日
5.0.1 2021年10月30日
4.0.2 2021年10月29日
0.1.0 2017年6月25日

#34 in 配置

每月24次下载
用于 asteroid

MIT 许可证

55KB
1K SLoC

nccl Rust

非垃圾配置语言

就像五分钱一样简单。也不是垃圾,这是关键点。

  • 键/值绑定
  • 灵活缩进(吃掉它,Python!)
  • 合并配置

Crates.io - 文档

nickel 无关,这是一个非常酷的项目。

演示

(文档中有更全面的示例)

简单

在 Rust 中

fn main() {
    let source = std::fs::read_to_string("examples/config.nccl").unwrap();
    let config = nccl::parse_config(&source).unwrap();
    let ports = config["server"]["port"]
        .values()
        .map(|port| port.parse::<u16>())
        .collect::<Result<Vec<_>, _>>()
        .unwrap();
    assert_eq!(ports, vec![80, 443]);
}

config.nccl

server
    domain
        example.com
        www.example.com
    port
        80
        443
    root
        /var/www/html

内部,您的配置是一个树。键和值之间没有真正的区别,一切都是节点。

继承

Nccl 允许您定义继承自自己的配置。如果节点同时在两个地方存在,它将被合并。

inherit.nccl

hello
    world
        panama
    friends
        doggos

sandwich
    meat
        bologne
        ham
    cheese
        provolone
        cheddar

inherit2.nccl

hello
    world
        alaska
        neighbor
    friends
        John
        Alex

sandwich
    meat
        turkey
    cheese
        muenster

parse_config_with 的结果

hello
    world
        panama
        alaska
        neighbor
    friends
        doggos
        John
        Alex
sandwich
    meat
        bologne
        ham
        turkey
    cheese
        provolone
        cheddar
        muenster

示例配置

# one major syntactical feature:

key
    value

# comments too

bool one
    t

bool too
    false

ints
    5280
    thirteen
    1738

dates
    2017-03-21
    20170321T234442+0400
    2017-03-21T23:44:42+04
    tomorrow

# this uses 3 spaces for the whole key
strings
   are bare words
   unless you want newlines
   in which case:
      "just\nuse quotes"
   "this is still valid"
   this """too"""

# this uses tabs for the whole key
lists
	juan
	deaux
	key
		value
	3
	false

indentation?
    must use the same for top-level values
    eg 2 or 4 spaces for one key
    or tabs for one key

依赖项

~0.7–1MB
~17K SLoC