#dotenv #env #environment #settings

macro dotenv_config

parse env to config struct for Rust

12 releases

new 0.2.1 Nov 1, 2024
0.2.0 Nov 1, 2024
0.1.9 Feb 7, 2024
0.1.8 Dec 26, 2023
0.1.3 Sep 11, 2022

#914 in Configuration

Download history 614/week @ 2024-07-12 691/week @ 2024-07-19 530/week @ 2024-07-26 834/week @ 2024-08-02 491/week @ 2024-08-09 718/week @ 2024-08-16 1002/week @ 2024-08-23 842/week @ 2024-08-30 596/week @ 2024-09-06 518/week @ 2024-09-13 575/week @ 2024-09-20 534/week @ 2024-09-27 558/week @ 2024-10-04 891/week @ 2024-10-11 865/week @ 2024-10-18 980/week @ 2024-10-25

3,400 downloads per month
Used in mailinator-rs

MIT license

18KB
287 lines

Dot Env Config

use .env as config file and parse environments to config struct.

Usage

derive EnvConfig

use dotenv_config::EnvConfig;
use dotenvy::dotenv;

#[derive(Debug, PartialEq)]
enum Color {
    Red,
    Green,
    Blue,
}

impl std::str::FromStr for Color {
    type Err = &'static str;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "red" => Ok(Color::Red),
            "green" => Ok(Color::Green),
            "blue" => Ok(Color::Blue),
            _ => Err("no match color"),
        }
    }
}

#[derive(Debug, EnvConfig)]
struct Config {
    #[env_config(default = "192.168.2.1")]
    server_addr: String,
    server_mode: bool,
    #[env_config(name = "ZINC_ENABLE", default = true)]
    enable: bool,
    #[env_config(name = "ZINC_NUMBER", default = 123456, help = "this is for demo")]
    num: Option<i64>,
    #[env_config(parse, default = "green")] // or parse=true
    color: Color,
}

fn main() {
    dotenv().ok();
    let cfg = Config::init().unwrap();
    println!("{:#?}", cfg);

    // print config help
    let help = Config::get_help();
    println!("{:#?}", help);
}

attribute env_config

you can use macro attribute set field attribute

  • name: change default environment key
  • default: if not set, used as default value

you can though system environments or .env file config it.

ZINC_ENABLE=false
ZINC_NUMBER=8787878

default load environment key is: structName_fieldName do UpperSnake, like above struct, default config key is:

CONFIG_SERVER_ADDR
CONFIG_SERVER_MODE
ZINC_ENABLE
ZINC_NUMBER

Dependencies

~2–2.7MB
~52K SLoC