3 stable releases
1.1.1 | Jan 31, 2022 |
---|---|
1.0.0 | Dec 9, 2021 |
#1319 in Filesystem
44 downloads per month
24KB
368 lines
TomlConf
Manage TOML Configuration files simply, cleanly, and consistently.
TomlConf uses the directories
library to locate the appropriate place for application data in a cross-platform way, and populates that location with a default file included at compile-time.
All you need to do is define a struct that implements serde::de::DeserializeOwned
(typically by way of #[derive(Deserialize)]
for a struct that owns its data) and implement the ConfigData
trait for it.
You can then use the constructors on the trait to create, load, and read the data from a file;
If you also derive Serialize
, you can even save changes to the data back into the file.
Example
#[derive(Deserialize)]
struct AppConfig {
output: String,
number: usize,
}
impl ConfigData for AppConfig {
const DEFAULT: &'static str = include_str!("cfg_default.toml");
}
fn main() {
let cfg: ConfigFile<AppConfig> = match AppConfig::setup(
"com", // "Qualifier"; OSX-specific.
"Cool Software LTD", // Organization name.
"TextPrinter", // Application name.
"config.toml", // Configuration file name.
) {
Ok((msg, config)) => {
// This `msg` variable tells the user whether an existing config
// file was found, or whether a new one was created with the
// default values instead.
eprintln!("{}", msg);
config
}
Err(msg) => {
eprintln!("Setup failed: {}", msg);
std::process::exit(1);
}
};
for i in 0..cfg.number {
println!("{}: {}", i, &cfg.output);
}
}
Dependencies
~0.3–1MB
~15K SLoC