feat: add setting value to env as default

This commit is contained in:
Dmitriy Pleshevskiy 2020-01-06 23:12:06 +03:00
parent 57598a876d
commit 3b95ed6f3e
6 changed files with 40 additions and 15 deletions

View file

@ -54,7 +54,7 @@ cargo test
* [x] Add namespace for variables
* [x] Custom env name
* [x] Support feature config and other meta directives
* [ ] Add default value to env if env is not found
* [x] Add default value to env if env is not found
* [ ] Concat env variables to one variable

View file

@ -10,7 +10,7 @@ use rocket::config::{Config, Environment};
config! {
ROCKET {
HOST: String => "localhost".to_string(),
PORT: u16 => 8000,
PORT: u16 => 9000,
BASE_URL: String => "/".to_string(),
}
}
@ -24,13 +24,7 @@ fn index() -> &'static str {
fn main() {
cfg::init();
let config = Config::build(Environment::Staging)
.address(cfg::ROCKET::HOST())
.port(cfg::ROCKET::PORT())
.finalize()
.unwrap();
rocket::custom(config)
rocket::ignite()
.mount(&cfg::ROCKET::BASE_URL(), routes![index])
.launch();
}

View file

@ -1,6 +1,6 @@
[package]
name = "itconfig"
version = "0.5.2"
version = "0.6.0"
authors = ["Dmitriy Pleshevskiy <dmitriy@ideascup.me>"]
description = "Easy build a configs from environment variables and use it in globally."
categories = ["config", "web-programming"]

View file

@ -44,7 +44,7 @@ fn main () {
* [x] Add namespace for variables
* [x] Custom env name
* [x] Support feature config and other meta directives
* [ ] Add default value to env if env is not found
* [x] Add default value to env if env is not found
* [ ] Concat env variables to one variable

View file

@ -557,15 +557,28 @@ macro_rules! __itconfig_variable {
#[macro_export(local_inner_macro)]
macro_rules! env_or {
($env_name:expr) => {
env_or!($env_name, panic!(format!(r#"Cannot read "{}" environment variable"#, $env_name)));
env_or!($env_name, format!(r#"Cannot read "{}" environment variable"#, $env_name), panic);
};
($env_name:expr, $default:expr) => {{
($env_name:expr, $default:expr) => {
env_or!($env_name, $default, default);
};
($env_name:expr, $default:expr, $token:tt) => {{
use std::env;
use itconfig::EnvValue;
env::var($env_name)
.map(|val| EnvValue::from(val).into())
.unwrap_or_else(|_| $default)
.unwrap_or_else(|_| env_or!(@$token $env_name, $default))
}};
(@default $env_name:expr, $default:expr) => {{
env::set_var($env_name, $default.to_string());
$default
}};
(@panic $env_name:expr, $default:expr) => {
panic!($default);
};
}

View file

@ -241,3 +241,21 @@ fn stranger_meta_data() {
assert_eq!(cfg::DATABASE_URL(), "95");
env::remove_var("MY_CUSTOM_NAME");
}
#[test]
fn setting_default_env_variable() {
config! {
DEFAULT_ENV_STRING: String => "localhost".to_string(),
DEFAULT_ENV_BOOLEAN: bool => true,
DEFAULT_ENV_UINT: u32 => 40,
DEFAULT_ENV_FLOAT: f64 => 40.9,
}
cfg::init();
assert_eq!(env::var("DEFAULT_ENV_STRING"), Ok("localhost".to_string()));
assert_eq!(env::var("DEFAULT_ENV_BOOLEAN"), Ok("true".to_string()));
assert_eq!(env::var("DEFAULT_ENV_UINT"), Ok("40".to_string()));
assert_eq!(env::var("DEFAULT_ENV_FLOAT"), Ok("40.9".to_string()));
}