feat: add setting value to env as default
This commit is contained in:
parent
57598a876d
commit
3b95ed6f3e
6 changed files with 40 additions and 15 deletions
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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"]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -240,4 +240,22 @@ fn stranger_meta_data() {
|
|||
#[cfg(feature = "postgres")]
|
||||
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()));
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue