GitXplorerGitXplorer
r

hydroconf-mirror

public
0 stars
0 forks
0 issues

Commits

List of commits on branch master.
Unverified
fac13fbe6268bee171b80c1812c7beba8f9c4718

chore: bump to v0.2.0

rrubik committed 4 years ago
Verified
86a8d49d91c2d332c627a89c0b03a4863c402819

feat: multisource configuration (#1)

rrubik committed 4 years ago
Unverified
0efe071e6adf811b38185c956f09fdab9f971124

chore: complete main documentation and move it outside of the readme

rrubik committed 4 years ago
Unverified
4caae53d7180143f5b2f5f4ea31f22bad35b79f0

feat: implement .env override

rrubik committed 4 years ago
Unverified
ec2a7c02a9ffe811d1bea59f2109e3e93c49095a

chore: fix README typo [ci skip]

rrubik committed 4 years ago
Unverified
04acf5c1a7474916a6de79e0a00b5cce7d379d74

chore: README typo [ci skip]

rrubik committed 4 years ago

README

The README file for this repository.
Hydroconf logo

Hydroconf

Effortless configuration management for Rust. Keep your apps hydrated!

Build Code Coverage Downloads (all time) ISC License

Hydroconf is a configuration management library for Rust, based on config-rs and heavily inspired by Python's dynaconf.

Features

  • Inspired by the 12-factor configuration principles
  • Effective separation of sensitive information (secrets)
  • Layered system for multi environments (e.g. development, staging, production, etc.)
  • Sane defaults, with a 1-line configuration loading
  • Read from JSON, TOML, YAML, HJSON, INI files

The config-rs library is a great building block, but it does not provide a default mechanism to load configuration and merge secrets, while keeping the different environments separated. Hydroconf fills this gap.

Quickstart

Suppose you have the following file structure:

├── config
│   ├── .secrets.toml
│   └── settings.toml
└── your-executable

settings.toml:

[default]
pg.port = 5432
pg.host = 'localhost'

[production]
pg.host = 'db-0'

.secrets.toml:

[default]
pg.password = 'a password'

[production]
pg.password = 'a strong password'

Then, in your executable source (make sure to add serde = { version = "1.0", features = ["derive"] } to your dependencies):

use serde::Deserialize;
use hydroconf::Hydroconf;

#[derive(Debug, Deserialize)]
struct Config {
    pg: PostgresConfig,
}

#[derive(Debug, Deserialize)]
struct PostgresConfig {
    host: String,
    port: u16,
    password: String,
}

fn main() {
    let conf: Config = match Hydroconf::default().hydrate() {
        Ok(c) => c,
        Err(e) => {
            println!("could not read configuration: {:#?}", e);
            std::process::exit(1);
        }
    };

    println!("{:#?}", conf);
}

If you compile and execute the program (making sure the executable is in the same directory where the config directory is), you will see the following:

$ ./your-executable
Config {
    pg: PostgresConfig {
        host: "localhost",
        port: 5432,
        password: "a password"
    }
}

Hydroconf will select the settings in the [default] table by default. If you set ENV_FOR_HYDRO to production, Hydroconf will overwrite them with the production ones:

$ ENV_FOR_HYDRO=production ./your-executable
Config {
    pg: PostgresConfig {
        host: "db-0",
        port: 5432,
        password: "a strong password"
    }
}

Settings can always be overridden with environment variables:

$ HYDRO_PG__PASSWORD="an even stronger password" ./your-executable
Config {
    pg: PostgresConfig {
        host: "localhost",
        port: 5432,
        password: "an even stronger password"
    }
}

The description of all Hydroconf configuration options and how the program configuration is loaded can be found in the documentation.

Logo made by Freepik from www.flaticon.com