curlyconf
Curlyconf
Curlyconf is a configuration file reader for the configuration file format used by, for example, named.conf and dhcpd.conf.
Example config (file.cfg)
person charlie {
fullname "Charlie Brown";
address 192.168.1.1;
}
person snoopy {
fullname "Snoopy";
}
Example code
use Deserialize;
// The initial section of any config is a rust struct.
This will print:
0: charlie fullname Some("Charlie Brown") addr Some(V4(192.168.1.1))
1: snoopy fullname Some("Snoopy") addr None
Curlyconf uses serde to deserialize the configuration file values to rust types, just like almost every other crate that does something similar.
Sections and values.
The configuration file contains section names, labels, sections, value names, and values:
- sections. they have a section_name, an optional label, and contain a list of other sections and values. The rust type of a section is a struct.
- values. this is a value_name, followed by a value. If the value is a
Vec
, there can be multiple values, separated by a comma.
A section can only have a label if:
- it is part of a
HashMap<Key, Section>
, or - it is part of a
Vec<Section>
and the rust struct that corresponds to the section has a__label__
field. That field will be set to the label value.
The label type can be any type, it does not have to be a string - it could
also be, for example, a PathBuf
or IpAddr
.
The basic structure of a config file is thus:
section_name [label] {
value_name value [,value...];
value_name value [,value...];
section_name [label] {
value_name value [,value...];
}
}
Enum
s are also supported (see the serde
docs) so you can do things like:
And then have a config like
animal cat {
purrs;
}
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.