| Crates.io | confine |
| lib.rs | confine |
| version | 0.1.3 |
| created_at | 2024-08-11 18:05:48.314845+00 |
| updated_at | 2024-08-12 07:28:51.1858+00 |
| description | An opinionated configuration macro built on top of config-rs |
| homepage | https://github.com/fabiandiez/confine-rs |
| repository | https://github.com/fabiandiez/confine-rs |
| max_upload_size | |
| id | 1333519 |
| size | 15,564 |
This crate provides both a macro and a builder API for loading configuration files.
I would recommend using the macro for most use cases, as it provides a more concise way of loading configuration files.
Using either one, you will be provided with a try_load function for your configuration struct.
This will instantiate your struct with the configuration values from the following sources in order of precedence:
config/application.tomlconfig/application-{environment}.tomlThe environment is determined by the CONFINE_ENV environment variable, which must be set in order to load the environment-specific configuration file.
You can configure most of these settings, but the general structure is always enforced. Things you can configure include:
config)application)CONFINE_ENV)use confine::confine;
fn main() {
let config = MyConfig::try_load().unwrap();
}
#[derive(Deserialize)]
#[confine]
struct MyConfig {
pub my_int: i64,
pub my_string: String,
pub my_bool: bool,
}
use confine::ConfineConfigBuilder;
use serde::Deserialize;
fn main() {
let config = ConfineConfigBuilder::default()
.try_load::<MyConfig>()
.unwrap();
}
#[derive(Deserialize)]
struct MyConfig {
pub my_int: i64,
pub my_string: String,
pub my_bool: bool,
}
use confine::confine;
fn main() {
let config = MyConfig::try_load().unwrap();
}
#[derive(Deserialize)]
#[confine(
path = "my_config",
prefix = "my_prefix",
env_var = "MY_ENV"
)]
struct MyConfig {
pub my_int: i64,
pub my_string: String,
pub my_bool: bool,
}
use confine::ConfineConfigBuilder;
use serde::Deserialize;
fn main() {
let config = ConfineConfigBuilder::default()
.path("my_config")
.prefix("my_prefix")
.env_var("MY_ENV")
.try_load::<MyConfig>()
.unwrap();
}
#[derive(Deserialize)]
struct MyConfig {
pub my_int: i64,
pub my_string: String,
pub my_bool: bool,
}
I found myself writing the same boilerplate code for loading configuration files in Rust over and over again.
Also, while config-rs is a great library, it allows for a lot of flexibility in how exactly you handle configuration.
Especially when working on multiple projects, I prefer to have a consistent way of storing and loading configuration files.
This crate aims to provide an easy-to-use macro for loading configuration files with sensible defaults.