Crate salak[−][src]
A layered configuration loader with zero-boilerplate configuration management.
About
salak
is a rust version of layered configuration loader inspired by
spring-boot.
salak
provide an Environment
structure which load properties from various PropertySource
s.
Any structure which impmement FromEnvironment
can get from Environment
by a key.
Feature enable_derive
provide rust attributes for auto derive FromEnvironment
.
Features
Below are a few of the features which salak
supports.
- Auto mapping properties into configuration struct.
#[salak(default="value")]
set default value.#[salak(name="key")]
rename property key.#[salak(prefix="salak.database")]
set prefix.
- ** Supports load properties from various sources **
- Load properties from command line arguments.
- Load properties from system environment.
- Load properties from toml config file.
- Load properties from yaml config file.
- Easy to add a new property source.
- Supports profile(develop/production) based configuration.
- Supports placeholder resolve.
- Supports reload configurations.
Placeholder
${key:default}
means get value ofkey
, if not exists then returndefault
.${key}
means get value ofkey
, if not exists then returnPropertyError::NotFound(_)
.\$\{key\}
means escape to${key}
.
Key Convension
a.b.c
is a normal key separated by dot(.
).a.b[0]
,a.b[1]
,a.b[2]
… is a group of keys with arrays.
Cargo Features
Default features
enable_log
, enable log record if enabled.enable_toml
, enable toml support.enable_derive
, enable auto deriveFromEnvironment
for struts.
Optional features
enable_clap
, enable default command line arguments parsing byclap
.enable_yaml
, enable yaml support.
Quick Example
use salak::*; #[derive(FromEnvironment, Debug)] pub struct SslConfig { key: String, pem: String, } #[derive(FromEnvironment, Debug)] #[salak(prefix = "database")] pub struct DatabaseConfig { url: String, #[salak(default = "salak")] username: String, password: Option<String>, description: String, #[salak(name="ssl")] ssl_config: Option<SslConfig>, } std::env::set_var("database.url", "localhost:5432"); std::env::set_var("database.description", "\\$\\{Hello\\}"); let env = Salak::new() .with_default_args(auto_read_sys_args_param!()) // This line need enable feature `enable_clap`. .build(); match env.load_config::<DatabaseConfig>() { Ok(val) => println!("{:?}", val), Err(e) => println!("{}", e), } // Output: DatabaseConfig { // url: "localhost:5432", // username: "salak", // password: None, // description: "${Hello}", // ssl_config: None, // }
Macros
auto_read_sys_args_param | enable_clap Auto generate |
Structs
MapPropertySource | A simple implementation of |
PlaceholderResolver | An implementation of |
Salak | A wrapper for |
SalakBuilder |
|
SourceRegistry | An implementation of |
SysArgsParam | enable_clap Command line help info, such as name, version, author, etc. |
SysEnvPropertySource |
|
Toml |
|
Yaml |
|
Enums
Property | Raw property. |
PropertyError | Property Error |
SysArgsMode | Command line arguments parser mode. |
Traits
Environment | An environment for getting properties with mutiple |
FromEnvironment | Convert from |
FromProperty | Convert from |
IntoProperty | Convert to |
PropertySource | An abstract source loader from various sources, such as command line arguments, system environment, files, etc. |
Derive Macros
FromEnvironment | enable_derive Auto derive |