salak

A configuration loader with zero-boilerplate configuration management.

Crates.io Crates.io License Actions Status

About

salak try to provide an out-of-box configuration loader for creating new apps, such as cli, web, servers.

Multi-Layered source environment.

salak defines following default PropertySources: 1. Command line arguments using clap to parsing -P, --propery KEY=VALUE. 2. System Environment. 3. app.toml(*) in current dir and $HOME dir. Or if you specify APP_CONF_DIR dir, then only load toml in this dir.

* APP_CONF_NAME can be specified to replace app.

Placeholder format

salak use format {key:default} to reference to other key, and if key not exists then use value default.

Key format

  1. a.b.c is a normal key separated by dot(.).
  2. a.b.0, a.b.1, a.b.2... is a group of keys with arrays.
  3. System environment key will be changed from HELLO_WORLD to hello.world, vice versa.

Auto derived parameters.

attribute default to set default value.
  1. #[salak(default="string")]
  2. #[salak(default=1)]
attribute disable_placeholder to disable placeholder parsing.
  1. #[salak(disable_placeholder)]
  2. #[salak(disable_placeholder = true)]

Quick Code

```rust use salak::*;

[derive(FromEnvironment, Debug)]

pub struct DatabaseConfig { url: String, #[salak(default = "salak")] name: String, #[salak(default = "{database.name}")] username: String, password: Option, #[salak(default = "{Hello}", disable_placeholder)] description: String, }

fn main() { std::env::setvar("database.url", "localhost:5432"); let env = SalakBuilder::new() .withdefaultargs(autoreadsysargs_param!()) .build();

match env.require::("database") { Ok(val) => println!("{:?}", val), Err(e) => println!("{}", e), } } // Output: DatabaseConfig { url: "localhost:5432", name: "salak", username: "salak", password: None, description: "{Hello}" } ```

Quick Run

```bash git clone https://github.com/leptonyu/salak.rs.git cd salak.rs cargo run --example salak -- -h

salak 0.2.0

Daniel Yu leptonyu@gmail.com

A rust configuration loader

USAGE:

salak [OPTIONS]

FLAGS:

-h, --help Prints help information

-V, --version Prints version information

OPTIONS:

-P, --property ... Set properties

```

TODO

  1. Support hashmap.
  2. Support toml date.
  3. Reload configurations.