#config #env #configuration #environment #macro

macro itconfig-macro

Easy build a configs from environment variables and use it in globally

3 stable releases

new 1.0.2 Feb 23, 2021
1.0.1 Feb 11, 2021
1.0.0 Mar 16, 2020

#85 in Configuration

Download history 387/week @ 2020-11-04 394/week @ 2020-11-11 379/week @ 2020-11-18 403/week @ 2020-11-25 166/week @ 2020-12-02 7/week @ 2020-12-09 4/week @ 2020-12-16 6/week @ 2020-12-23 8/week @ 2020-12-30 9/week @ 2021-01-06 12/week @ 2021-01-13 8/week @ 2021-01-20 7/week @ 2021-01-27 4/week @ 2021-02-03 46/week @ 2021-02-10 19/week @ 2021-02-17

214 downloads per month
Used in itconfig

MIT license

24KB
428 lines

itconfig

Easy build a configs from environment variables and use it in globally.

We recommend you start with the documentation.

Installation

These macros require a Rust compiler version 1.31 or newer.

Add itconfig = { version = "1.0", features = ["macro"] } as a dependency in Cargo.toml.

Cargo.toml example:

[package]
name = "my-crate"
version = "0.1.0"
authors = ["Me <user@rust-lang.org>"]

[dependencies]
itconfig = { version = "1.0", features = ["macro"] }

Example usage

use std::itconfig;
use std::env;
//use dotenv::dotenv;

config! {
    DEBUG: bool => false,
    
    #[env_name = "APP_HOST"]
    HOST: String => "127.0.0.1",
    
    DATABASE_URL < (
        "postgres://",
        POSTGRES_USERNAME => "user",
        ":",
        POSTGRES_PASSWORD => "pass",
        "@",
        POSTGRES_HOST => "localhost:5432",
        "/",
        POSTGRES_DB => "test",
    ),
    
    APP {
        static BASE_URL => "/api", // &'static str by default
    
        ARTICLE {
            static PER_PAGE: u32 => 15,
        }
        
        #[cfg(feature = "companies")]
        COMPANY {
            #[env_name = "INSTITUTIONS_PER_PAGE"]
            static PER_PAGE: u32 => 15,
        }
    }
    
    FEATURE {
        NEW_MENU: bool => false,
    
        COMPANY {
            PROFILE: bool => false,
        }
    }
}

fn main () {
    // dotenv().expect("dotenv setup to be successful");
    // or
    env::set_var("FEATURE_NEW_MENU", "t");
    
    config::init();
    assert_eq!(config::HOST(), String::from("127.0.0.1"));
    assert_eq!(config::DATABASE_URL(), String::from("postgres://user:pass@localhost:5432/test"));
    assert_eq!(config::APP:ARTICLE:PER_PAGE(), 15);
    assert_eq!(config::FEATURE::NEW_MENU(), true);
}

Macro is an optional feature, disabled by default. You can use this library without macro

use itconfig::*;
use std::env;
// use dotenv::dotenv;

fn main() {
    // dotenv().expect("dotenv setup to be successful");
    // or
    env::set_var("DATABASE_URL", "postgres://127.0.0.1:5432/test");

    let database_url = get_env::<String>("DATABASE_URL").unwrap();
    let new_profile: bool = get_env_or_default("FEATURE_NEW_PROFILE", false);
    let articles_per_page: u32 = get_env_or_set_default("ARTICLES_PER_PAGE", 10);
}

Roadmap

  • Add namespace for variables
  • Custom env name
  • Support feature config and other meta directives
  • Add default value to env if env is not found
  • Concat env variables to one variable
  • Add nested namespaces
  • Support meta for namespaces
  • Support array type
  • Rewrite to proc macro
  • Support hashmap type
  • Support custom env type
  • Common configuration for namespace variables

Available features

  • default - ["primitives"]
  • macro - Activates config! macros for easy configure web application.
  • array - Add EnvString impl for vector type (uses optional serde_json package).
  • primitives - Group for features: numbers and bool.
  • numbers - Group for features: int, uint and float.
  • int - Group for features: i8, i16, i32, i64, i128 and isize.
  • uint - Group for features: u8, u16, u32, u64, u128 and usize.
  • float - Group for features: f32 and f64
  • i8 - impl EnvString for i8 type
  • i16 - impl EnvString for i16 type
  • i32 - impl EnvString for i32 type
  • i64 - impl EnvString for i64 type
  • i128 - impl EnvString for i128 type
  • isize - impl EnvString for isize type
  • u8 - impl EnvString for u8 type
  • u16 - impl EnvString for u16 type
  • u32 - impl EnvString for u32 type
  • u64 - impl EnvString for u64 type
  • u128 - impl EnvString for u128 type
  • usize - impl EnvString for usize type
  • f32 - impl EnvString for f32 type
  • f64 - impl EnvString for f64 type
  • bool - impl EnvString for bool type

License

[MIT] © Ice Temple

Contributors

pleshevskiy (Dmitriy Pleshevskiy) – creator, maintainer.

Dependencies

~0.4–0.8MB
~20K SLoC