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

bash cargo add configuru

  1. Create .env.jsonc in root of your project, add defaults or placeholders.

jsonc { // 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

```rust // Import dependencies use serdederive::Deserialize; use configuru::{Loader, Hidden, configuru}; use serdejson;

// 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, customer: Customer, }

// Implement a conversion from Loader to your Config impl From for Config { fn from(loader: Loader) -> Self { Config { port: loader.i64("SERVERPORT"), host: loader.str("SERVERHOST"), password: loader.hidden().str("PASSWORD"), customer: loader.custom("CUSTOMER", |str| serdejson::fromstr(&str).unwrap()), } } } ```

  1. Use your configuration params throughout your app

rust 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.