fondant
is a macro based library to take the boilerplate out of
configuration handling. Most of fondant
is based off the confy
crate.
fondant
adds a couple of extra features:
```rust // the struct has to derive Serialize, Deserialize and Default
// |
// -- this attribute sets the file name to "config.toml"
//
-- the file format to "toml"
// `-- the file path to "default" (read the notes below)
struct AppConfig {
version: u32,
port: u32,
username: String,
}
fn main() {
// use load
(associated method) to load the config file
let mut conf = AppConfig::load().unwrap();
// do stuff with conf
conf.version = 2;
// call `store` to save changes
conf.store().unwrap();
} ```
Notes:
- load
returns Default::default
if the config file is not present, and stores
a serialized Default::default
at the specified path
- the "default" config path varies by platform:
* GNU/Linux: $XDG_CONFIG_HOME/my_cool_crate/config.toml
(follows xdg spec)
* MacOS: $HOME/Library/Preferences/my_cool_crate/config.toml
* Windows: {FOLDERID_RoamingAppData}\_project_path_\config
Set your own filename, for ex.: apprc
```rust
struct AppConfig { // -- snip -- } // effective path: $XDGCONFIGHOME/mycoolcrate/apprc.toml // effective format: toml ```
Change file format to yaml
, by changing the file extension.
Supported extensions are yaml
, toml
, json
:
```rust
struct AppConfig { // -- snip -- } // effective path: $XDGCONFIGHOME/mycoolcrate/config.yaml // effective format: yaml ```
Override the default config path, for ex.: the home directory (it is not recommended to override config path):
```rust
struct AppConfig { // -- snip -- } // effective path: $HOME/.apprc.json // effective format: json ```
Fondant meshes well with Serde, for ex.: ```rust
struct Madagascar { #[serde(skip)] rating: u32,
name: String,
penguins: u32,
} ```
Above snippet produces this config file:
toml
name = 'Central Park Zoo'
penguins = 4
syn::Error
and syn::Result
to report macro errors