non-crap config language
It's as easy as five cents. Also not crap, which is kind of the point.
No relation to nickel which is another very cool project.
(more comprehensive examples in the docs)
In rust:
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.
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
:
text
hello
world
panama
alaska
neighbor
friends
doggos
John
Alex
sandwich
meat
bologne
ham
turkey
cheese
provolone
cheddar
muenster
```
key value
bool one t
bool too false
ints 5280 thirteen 1738
dates 2017-03-21 20170321T234442+0400 2017-03-21T23:44:42+04 tomorrow
strings are bare words unless you want newlines in which case: "just\nuse quotes" "this is still valid" this """too"""
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 ```