2 releases

0.1.1 Jul 11, 2023
0.1.0 Jul 11, 2023

#419 in Configuration

29 downloads per month

Custom license

9KB
155 lines

Configuru

Configuru is a library for configuration management. It is JSON/JSONC configuration loader and a clone project of AckeeCZ/configuru tool built for Node.js apps.

Getting started

  1. Install
cargo add configuru
  1. Create .env.jsonc in root of your project, add defaults or placeholders.
{
  // Database secrets
  "PASSWORD": "testtest",
  // Sever secrets
  "SERVER_HOST": "localhost",
  "SERVER_PORT": 3000,
  // Entities
  "CUSTOMER": "{\"age\": 25, \"email\":\"test@example.org\"}" // customer related secrets
}
  1. (optional) As a developer (or environment), create a custom override file (e.g. ~/.env/my-project.jsonc) and save the path in your CFG_JSON_PATH.

  2. Usage

// Import dependencies
use serde_derive::Deserialize;
use configuru::{Loader, Hidden, configuru};
use serde_json;

// Define data structures you want to load from configuration file. Data types must match variables in configuration file.
#[derive(Debug, Deserialize)]
struct Customer {
    email: String,
    age: i64,
}

#[derive(Debug)]
struct Config {
    port: i64,
    host: String,
    password: Hidden<String>,
    customer: Customer,
}

// Implement a conversion from Loader to your Config
impl From<Loader> for Config {
    fn from(loader: Loader) -> Self {
        Config {
            port: loader.i64("SERVER_PORT"),
            host: loader.str("SERVER_HOST"),
            password: loader.hidden().str("PASSWORD"),
            customer: loader.custom("CUSTOMER", |str| serde_json::from_str(&str).unwrap()),
        }
    }
}
  1. Use your configuration params throughout your app
fn main() {
  // Usage how to load config  
    let config: Config = configuru(".env.jsonc");
    println!("Example: {:?}", config) // Example: Config { port: 3000, host: "localhost", password: <redacted>, customer: Customer { email: "test@example.org", age: 25 } }
}

License

This project is licensed under MIT.

Dependencies

~2.7–4.5MB
~85K SLoC