| Crates.io | tomlconf |
| lib.rs | tomlconf |
| version | 1.1.1 |
| created_at | 2021-12-09 01:29:59.202775+00 |
| updated_at | 2022-01-31 02:53:20.695193+00 |
| description | Automatically generate, read, and manage application-specific TOML configuration files simply, cleanly, and consistently. |
| homepage | |
| repository | https://github.com/yaulendil/tomlconf |
| max_upload_size | |
| id | 494917 |
| size | 34,640 |
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.
#[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);
}
}