GithubHelp home page GithubHelp logo

atul9 / itconfig-rs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pleshevskiy/enve

0.0 1.0 0.0 119 KB

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

License: MIT License

Rust 100.00%

itconfig-rs's Introduction

itconfig

Build Status Documentation Crates.io Join the chat at https://gitter.im/icetemple/itconfig-rs

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

We recommend you start with the documentation.

Motivation

I began to use rust with web programming experience where environment variables are widely used and often there are more then 50 of them. First I looked at already created libraries. But there it's necessary to initialise structure that needs to be moved to each function where you need variable. It uses little bit memory, but configuration lifetime is as long as application lifetime. Because of it I decided to create my own library.

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 <[email protected]>"]

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

Example usage

use itconfig::config;
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);
}

Running tests

cargo test

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.

itconfig-rs's People

Contributors

gitter-badger avatar pleshevskiy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.