#config #env #configuration #environment #macro

itconfig

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

22 releases (2 stable)

✓ Uses Rust 2018 edition

1.0.1 Mar 17, 2020
0.11.2 Feb 11, 2020
0.5.1 Dec 29, 2019

#10 in Configuration

Download history 96/week @ 2019-12-22 30/week @ 2019-12-29 81/week @ 2020-01-05 229/week @ 2020-01-12 160/week @ 2020-01-19 140/week @ 2020-01-26 370/week @ 2020-02-02 348/week @ 2020-02-09 390/week @ 2020-02-16 359/week @ 2020-02-23 185/week @ 2020-03-01 119/week @ 2020-03-08 269/week @ 2020-03-15 403/week @ 2020-03-22 273/week @ 2020-03-29

861 downloads per month

MIT license

20KB
244 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().ok();
    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, enabled by default. You can install itconfig without default features and use this lib as shown below

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

fn main() {
    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.6–1MB
~22K SLoC