Configuru
Configuru is a library for configuration management. It is JSON/JSONC configuration loader and a clone project of [AckeeCZ/configuru](https://github.com/AckeeCZ/configuru) tool built for Node.js apps.
## Getting started
1. Install
```bash
cargo add configuru
```
2. 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
}
```
3. _(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`.
4. Usage
```rust
// 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,
customer: Customer,
}
// Implement a conversion from Loader to your Config
impl From 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()),
}
}
}
```
5. 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: , customer: Customer { email: "test@example.org", age: 25 } }
}
```
## License
This project is licensed under [MIT](./LICENSE).