From edb42b4f227319f712d107a63a75cddd41839429 Mon Sep 17 00:00:00 2001 From: Akshay Date: Wed, 25 Mar 2020 20:20:23 +0530 Subject: ignore nested `target`s --- fondant/Cargo.toml | 9 ++++++ fondant/src/lib.rs | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 fondant/Cargo.toml create mode 100644 fondant/src/lib.rs (limited to 'fondant') diff --git a/fondant/Cargo.toml b/fondant/Cargo.toml new file mode 100644 index 0000000..d6886b1 --- /dev/null +++ b/fondant/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "fondant" +version = "0.1.0" +authors = ["Akshay "] +edition = "2018" + +[dependencies] +fondant_derive = {version = "0.1.0", path = "../fondant_derive"} +fondant_deps = {version = "0.1.0", path = "../fondant_deps"} diff --git a/fondant/src/lib.rs b/fondant/src/lib.rs new file mode 100644 index 0000000..d5758dc --- /dev/null +++ b/fondant/src/lib.rs @@ -0,0 +1,86 @@ +//! `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: +//! +//! - support for json, yaml and toml +//! - support for custom config paths +//! - support for custom config file names +//! +//! ### Sample usage +//! +//! ``` +//! // the struct has to derive Serialize, Deserialize and Default +//! #[derive(Configure, Serialize, Deserialize, Default)] +//! #[config_file = "config.toml"] +//! // | +//! // `-- 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` +//! +//! ### Customization +//! +//! Set your own filename, for ex.: `apprc` +//! +//! ``` +//! #[derive(Configure, Serialize, Deserialize, Default)] +//! #[config_file = "apprc.toml"] +//! struct AppConfig { +//! // -- snip -- +//! } +//! // effective path: $XDG_CONFIG_HOME/my_cool_crate/apprc.toml +//! // effective format: toml +//! ``` +//! +//! Change file format to `yaml`, by changing the file extension. +//! Supported extensions are `yaml`, `toml`, `json`: +//! ``` +//! #[derive(Configure, Serialize, Deserialize, Default)] +//! #[config_file = "config.yaml"] +//! struct AppConfig { +//! // -- snip -- +//! } +//! // effective path: $XDG_CONFIG_HOME/my_cool_crate/config.yaml +//! // effective format: yaml +//! ``` +//! +//! Override the default config path, for ex.: the home directory +//! (it is not recommended to override config path): +//! ``` +//! #[derive(Configure, Serialize, Deserialize, Default)] +//! #[config_file = "~/.apprc.json"] +//! struct AppConfig { +//! // -- snip -- +//! } +//! // effective path: $HOME/.apprc.json +//! // effective format: json +//! ``` + +pub use fondant_deps::fondant_exports; +pub use fondant_deps::Configure; +pub use fondant_deps::FondantError; +pub use fondant_derive::Configure; -- cgit v1.2.3