26 releases (16 stable)
5.4.0 | Mar 21, 2024 |
---|---|
5.3.0 | Apr 8, 2022 |
5.0.1 | Oct 30, 2021 |
4.0.2 | Oct 29, 2021 |
0.1.0 | Jun 25, 2017 |
#32 in Configuration
Used in asteroid
55KB
1K
SLoC
nccl
non-crap config language
It's as easy as five cents. Also not crap, which is kind of the point.
- key/value bindings
- flexible indentation (eat it, python!)
- merging configurations together
No relation to nickel which is another very cool project.
Demo
(more comprehensive examples in the docs)
Simple
In 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
Internally, your configuration is a tree. There is no real distinction between keys and values, everything is a node.
Inheritance
Nccl lets you define your own configuration to inherit from. If a node is present in both, it will be merged.
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
Result from parse_config_with
:
hello
world
panama
alaska
neighbor
friends
doggos
John
Alex
sandwich
meat
bologne
ham
turkey
cheese
provolone
cheddar
muenster
Example config
# 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
Dependencies
~0.8–1MB
~18K SLoC