salak

Salak is a multi layered configuration loader and zero-boilerplate configuration parser, with many predefined sources.

Crates.io Crates.io Documentation dependency status License Actions Status

Please refer to salak doc.

Notice

Please notice that salak-0.9.* is totally rewrited, so the APIs may changes much, and some functions may be removed. They will be added in later version.

Quick Example

```rust use salak::*;

[derive(Debug, FromEnvironment)]

[salak(prefix = "config")]

struct Config { #[salak(default = false)] verbose: bool, optional: Option, #[salak(name = "val")] value: i64, } let env = Salak::builder() .set("config.val", "2021") .build() .unwrap(); let config = env.get::().unwrap(); asserteq!(2021, config.value); asserteq!(None, config.optional); assert_eq!(false, config.verbose); ```

Trait FromEnvironment

Salak Factory

salak_factory can initialize resource based on salak, such as redis, postgresql, etc. ```rust use std::sync::Arc;

use salak::*; use salakfactory::redisdefault::RedisPool;

[derive(Service)]

struct RedisService { _redis: Arc, #[salak(namespace = "secondary")] _redi2: Arc, }

fn main() -> Result<(), PropertyError> { envlogger::builder() .filterlevel(log::LevelFilter::Info) .tryinit()?; let env = Salak::builder() .registerdefaultresource::()? .registerdefaultresource::()? .registerresource::(ResourceBuilder::new("secondary"))? .configureargs(appinfo!()) .build()?; let service = env.getresource::()?; // let conn = service.redis.get()?; Ok(()) } ```