8 unstable releases (3 breaking)
0.8.0 | May 28, 2021 |
---|---|
0.7.0 | May 27, 2021 |
0.6.6 | May 15, 2021 |
0.5.2 | May 9, 2021 |
#621 in Configuration
39 downloads per month
11KB
123 lines
Configr
The dead easy way to use config files in your project
This will load a config.toml
file if it exists, otherwise it will
create the needed folders and the toml file.
It will use the OS user config directories if there is a config file or its
forced which are as follows
- Linux:
$XDG_CONFIG_HOME/app-name/config.toml
- Windows:
%APPDATA%/app-name/config.toml
- Mac OS:
$HOME/Library/Application Support/app-name/config.toml
otherwise fallback to loading the systemwide config, which is located at
- Unix:
/etc/app-name/config.toml
- Others:
BINARY_LOCATION/app-name/config.toml
or create it, if it isn't possible to create a systemwide config, it will
generate a user config
It is also a possibility of using a custom config directory
Usage
Add the following to your Cargo.toml
configr = "0.8.0"
or use cargo-edit with
cargo add configr
then in your project add the following snippet
use configr::{Config, Configr};
#[derive(Configr, Deserialize, Serialize, Default)]
pub struct BotConfig {
bot_username: String,
client_id: String,
client_secret: String,
channel: String,
}
replacing BotConfig with your configuration struct
and then load you can load the config, usually at the start of the application
with the load
function to load from the system config directory, this takes
the application name and whether to force usage of user config directories
// Will load from /home/USER/.config/bot-app/config.toml
let config = BotConfig::load("bot app", true).unwrap();
or with the load_with_dir
function to use a custom config
directory
// Will load from /home/USER/bot-app/config.toml
let config = BotConfig::load_with_dir("bot app", "$HOME").unwrap();
This will automatically populate the config.toml
with default values, based on
Default implentation
Contributors
I am at the moment not accepting any contributions that don't close an issue.
If you find any problems, or edge cases, please do open an issue!
License
This project is licensed under the unlicense license.
Dependencies
~1.5–2.3MB
~49K SLoC