[−][src]Crate configurable
This crate provides a set of functions for loading/saving structs to toml files in OS-accurate locations
A normal configuration (e.g. saving something to a toml file in CONFIG_DIR)
use configurable::{Configurable, Config, Data, Error, LoadState}; use serde::{Serialize, Deserialize}; #[derive(Serialize, Deserialize)] struct MyConfiguration { name: String, attempts: u32, force: bool, } impl Default for MyConfiguration { fn default() -> Self { Self { name: "Foobar".into(), attempts: 3, force: false, } } } impl Config for MyConfiguration {} impl Configurable for MyConfiguration { const ORGANIZATION: &'static str = "museun"; const APPLICATION: &'static str = "foobar"; const NAME: &'static str = "config.toml"; fn ensure_dir() -> Result<std::path::PathBuf, Error> { <Self as Config>::ensure_dir() } }
A 'data' configuration (e.g. saving something to a json file in the DATA_DIR)
use configurable::{Configurable, Config, Data, Error, LoadState}; use serde::{Serialize, Deserialize}; #[derive(Default, Serialize, Deserialize)] struct MyData { #[serde(flatten)] data: std::collections::HashMap<String, String> } impl Data for MyData {} impl Configurable for MyData { const ORGANIZATION: &'static str = "museun"; const APPLICATION: &'static str = "foobar"; const NAME: &'static str = "data.json"; fn ensure_dir() -> Result<std::path::PathBuf, Error> { <Self as Data>::ensure_dir() } }
Loading the data
fn load_my_stuff() -> Something {
use configurable::Configuable;
// this tries to load the configuration ot creates a default instance of it
match match Something::load_or_default() {
Ok(data) => data,
Err(err) => {
eprintln!("cannot load configuration: {}", err);
std::process::exit(1)
}
} {
// it was successfully loaded
configurable::LoadState::Loaded(this) => this,
// it was defaulted
configurable::LoadState::Default(this) => {
eprintln!(
"a default configuration was created at: {}",
Something::path().unwrap().display()
);
std::process::exit(1)
}
}
}
Structs
Env | Environment var loader which can be overridden by a .env file |
Enums
Error | Errors produced by these traits |
LoadState | State of the instance from |
Traits
Config | A Configurable type that loads from the equivalent of |
Configurable | Trait to provide easier loaded/saving of a |
Data | A Configurable type that loads from the equivalent of |