Crates.io | nccl |
lib.rs | nccl |
version | 5.4.0 |
source | src |
created_at | 2017-06-25 22:59:22.389951 |
updated_at | 2024-03-21 00:06:16.427021 |
description | Minimal configuration file format and library. |
homepage | https://github.com/zphixon/nccl |
repository | https://github.com/zphixon/nccl |
max_upload_size | |
id | 20709 |
size | 65,850 |
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:
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
:
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