11 releases (stable)
| 2.2.1 | Mar 16, 2025 |
|---|---|
| 2.2.0 | Jul 1, 2022 |
| 2.1.0 | Apr 5, 2022 |
| 2.0.1 | Jul 27, 2021 |
| 0.2.0 | Jan 30, 2019 |
#132 in Configuration
623 downloads per month
39KB
945 lines
Confindent
Configuration by indentation. Like ~/.ssh/config.
Example, short and sweet
use confindent::Confindent;
use std::error::Error;
fn main() {
let conf: Confindent = "User gennyble\n\tEmail gen@nyble.dev\n\tID 256".parse().unwrap();
let user = conf.child("User").unwrap();
let username = user.value().unwrap();
let email = user.child_value("Email").unwrap();
let id: usize = user.child_parse("ID").unwrap();
println!("User {username}: {id} Contact: {email}");
}
Quickstart!
The format, briefly.
It's a kind of tree, key-value thing. Lines are key-value pairs, the value starting at the first space after the indent. You can add a child to a value by indenting it with spaces or tabs. Indent the same amount to add another child to that same value. Indent more than you did initially to add a grandchild. Don't mix spaces and tabs. Like this!
Root this is the root
Child I'm a child!
Child You can have multiple children with the same keys!
Grandchild I'm a grandchild!
Using the crate, quickly! also, here are the docs again
Open and parse a file with Confindent::from_file. Pass it a path. It returns
a Result<Confindent, ParseError>.
Get a direct child with the child(key) function. Key needs to be able
to turn into a &str. This returns an Option<&Value>. Value is the main data-storing
struct. You can get multiple Value of the same name with children(key), which
returns a Vec<&Value>.
You can get a Value's value with value(). It returns an Option<&str>. Get an owned,
Option<String> with value_owned(). If you want
to check that a Value has a direct child but don't care about the value, use
has_child(key). It returns bool for whether or not a child was found with that key.
Want to parse a possible value into a different type, T? Instead of value() use
parse(). It returns Result<T, ValueParseError<T>>. That type
may look weird and that's because it is. ValueParseError is an enum
that can be NoValue or ParseError(error) where error is the error part of the
Result that T::FromStr returns.
Don't want to call child(key) and then value() or parse()? You can use
child_value(key) and child_parse(key) to do both of those
at once. Both of these functions return what value() and parse() normally return,
respectively. There's also child_owned() which is like value_owned() wherein
it returns an Option<String> of a child's value.