Crates.io | configr_derive |
lib.rs | configr_derive |
version | 0.8.0 |
source | src |
created_at | 2021-05-08 23:18:30.143769 |
updated_at | 2021-05-28 12:23:47.621369 |
description | The dead easy way to use config files in your project |
homepage | |
repository | https://github.com/nyxiative/configr |
max_upload_size | |
id | 395021 |
size | 1,777 |
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
$XDG_CONFIG_HOME/app-name/config.toml
%APPDATA%/app-name/config.toml
$HOME/Library/Application Support/app-name/config.toml
otherwise fallback to loading the systemwide config, which is located at
/etc/app-name/config.toml
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
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
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!
This project is licensed under the unlicense license.