This repository has been archived on 2022-07-24. You can view files and clone it, but cannot push or open issues or pull requests.
itconfig/itconfig
2020-02-08 15:09:58 +03:00
..
src feat: add lazy static 2020-02-08 15:09:58 +03:00
Cargo.toml feat: add lazy static 2020-02-08 15:09:58 +03:00
README.md feat(array): add new feature for impl vec 2020-01-21 19:36:24 +03:00

itconfig

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

We recommend you start with the documentation.

Example usage

#[macro_use] extern crate 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 {
        ARTICLE {
            PER_PAGE: u32 => 15,
        }
        
        #[cfg(feature = "companies")]
        COMPANY {
            #[env_name = "INSTITUTIONS_PER_PAGE"]
            PER_PAGE: u32 => 15,
        }
    }
    
    FEATURE {
        NEW_MENU: bool => false,
    
        COMPANY {
            PROFILE: bool => false,
        }
    }
}

fn main () {
    // dotenv().ok();
    env::set_var("FEATURE_NEW_MENU", "t");
    
    cfg::init();
    assert_eq!(cfg::HOST(), String::from("127.0.0.1"));
    assert_eq!(cfg::DATABASE_URL(), String::from("postgres://user:pass@localhost:5432/test"));
    assert_eq!(cfg::APP:ARTICLE:PER_PAGE(), 15);
    assert_eq!(cfg::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
  • Support hashmap type
  • Support custom env type
  • Common configuration for namespace variables

Available features

  • default = ["macro", "primitives"]
  • macro = []
  • array = ["serde_json"]
  • primitives = ["numbers", "bool"]
  • numbers = ["int", "uint", "float"]
  • int = ["i8", "i16", "i32", "i64", "i128", "isize"]
  • uint = ["u8", "u16", "u32", "u64", "u128", "usize"]
  • float = ["f32", "f64"]
  • i8 = []
  • i16 = []
  • i32 = []
  • i64 = []
  • i128 = []
  • isize = []
  • u8 = []
  • u16 = []
  • u32 = []
  • u64 = []
  • u128 = []
  • usize = []
  • f32 = []
  • f64 = []
  • bool = []

License

[MIT] © Ice Temple

Contributors

pleshevskiy (Dmitriy Pleshevskiy) creator, maintainer.