parent
b463bdeeef
commit
b7b8379e10
@ -0,0 +1,81 @@ |
|||||||
|
use envy; |
||||||
|
|
||||||
|
use data::Data; |
||||||
|
use Result; |
||||||
|
|
||||||
|
/// Attempts to deserialize a Data struct from the environment
|
||||||
|
pub fn from_env() -> Result<Data> { |
||||||
|
Ok(envy::from_env()?) |
||||||
|
} |
||||||
|
|
||||||
|
/// Attempts to deserialize a Data struct from the environment. All keys are
|
||||||
|
/// prefixed with the given prefix
|
||||||
|
pub fn from_env_prefixed(prefix: &str) -> Result<Data> { |
||||||
|
Ok(envy::prefixed(prefix).from_env()?) |
||||||
|
} |
||||||
|
|
||||||
|
#[cfg(test)] |
||||||
|
mod tests { |
||||||
|
use super::*; |
||||||
|
use std::{ |
||||||
|
env, |
||||||
|
ops::FnOnce, |
||||||
|
panic::{catch_unwind, UnwindSafe}, |
||||||
|
}; |
||||||
|
|
||||||
|
fn withenv<F: FnOnce() -> R + UnwindSafe, R>(prefix: Option<&'static str>, test: F) -> R { |
||||||
|
env::set_var(makekey(prefix, "BASE"), "https://example.com"); |
||||||
|
env::set_var(makekey(prefix, "CLIENT_ID"), "adbc01234"); |
||||||
|
env::set_var(makekey(prefix, "CLIENT_SECRET"), "0987dcba"); |
||||||
|
env::set_var(makekey(prefix, "REDIRECT"), "urn:ietf:wg:oauth:2.0:oob"); |
||||||
|
env::set_var(makekey(prefix, "TOKEN"), "fedc5678"); |
||||||
|
|
||||||
|
let result = catch_unwind(test); |
||||||
|
|
||||||
|
env::remove_var(makekey(prefix, "BASE")); |
||||||
|
env::remove_var(makekey(prefix, "CLIENT_ID")); |
||||||
|
env::remove_var(makekey(prefix, "CLIENT_SECRET")); |
||||||
|
env::remove_var(makekey(prefix, "REDIRECT")); |
||||||
|
env::remove_var(makekey(prefix, "TOKEN")); |
||||||
|
|
||||||
|
fn makekey(prefix: Option<&'static str>, key: &str) -> String { |
||||||
|
if let Some(prefix) = prefix { |
||||||
|
format!("{}{}", prefix, key) |
||||||
|
} else { |
||||||
|
key.to_string() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
result.expect("failed") |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn test_from_env_no_prefix() { |
||||||
|
let desered = withenv(None, || from_env()).expect("Couldn't deser"); |
||||||
|
assert_eq!( |
||||||
|
desered, |
||||||
|
Data { |
||||||
|
base: "https://example.com".into(), |
||||||
|
client_id: "adbc01234".into(), |
||||||
|
client_secret: "0987dcba".into(), |
||||||
|
redirect: "urn:ietf:wg:oauth:2.0:oob".into(), |
||||||
|
token: "fedc5678".into(), |
||||||
|
} |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn test_from_env_prefixed() { |
||||||
|
let desered = withenv(Some("APP_"), || from_env_prefixed("APP_")).expect("Couldn't deser"); |
||||||
|
assert_eq!( |
||||||
|
desered, |
||||||
|
Data { |
||||||
|
base: "https://example.com".into(), |
||||||
|
client_id: "adbc01234".into(), |
||||||
|
client_secret: "0987dcba".into(), |
||||||
|
redirect: "urn:ietf:wg:oauth:2.0:oob".into(), |
||||||
|
token: "fedc5678".into(), |
||||||
|
} |
||||||
|
); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue