Struct tomlenv::Environments
source · pub struct Environments<S, T>where
S: Ord,{ /* private fields */ }
Expand description
Hold environment specific data as a map from your environment hierarchy key to data struct containg the config for that particular environment.
Example
// Your environment specific data struct
// *NOTE*: This must implement `Deserialize` and `Serialize`
#[derive(Debug, Deserialize, Getters, Serialize)]
struct RuntimeEnv {
#[get]
name: String,
#[get]
key: Option<String>,
}
// Your environment specific configuration
let toml = r#"[envs.prod]
name = "Production"
key = "abcd-123-efg-45"
[envs.stage]
name = "Stage"
[envs.test]
name = "Test"
[envs.dev]
name = "Development"
[envs.local]
name = "Local"
"#;
// Deserialize the TOML config into your environment structs
let mut cursor = Cursor::new(toml);
let envs: Environments<Environment, RuntimeEnv> = Environments::from_reader(&mut cursor)?;
// Test that all the environments are present
env::set_var("env", "prod");
let mut current = envs.current()?;
assert_eq!(current.name(), "Production");
assert_eq!(current.key(), &Some("abcd-123-efg-45".to_string()));
env::set_var("env", "stage");
current = envs.current()?;
assert_eq!(current.name(), "Stage");
assert_eq!(current.key(), &None);
env::set_var("env", "test");
current = envs.current()?;
assert_eq!(current.name(), "Test");
assert_eq!(current.key(), &None);
env::set_var("env", "dev");
current = envs.current()?;
assert_eq!(current.name(), "Development");
assert_eq!(current.key(), &None);
env::set_var("env", "local");
current = envs.current()?;
assert_eq!(current.name(), "Local");
assert_eq!(current.key(), &None);
Implementations
sourceimpl<S, T> Environments<S, T>where
T: DeserializeOwned + Serialize,
S: DeserializeOwned + Serialize + Ord + PartialOrd + TryFrom<String>,
Error: From<<S as TryFrom<String>>::Error>,
impl<S, T> Environments<S, T>where
T: DeserializeOwned + Serialize,
S: DeserializeOwned + Serialize + Ord + PartialOrd + TryFrom<String>,
Error: From<<S as TryFrom<String>>::Error>,
Trait Implementations
sourceimpl<'de, S, T> Deserialize<'de> for Environments<S, T>where
S: Ord,
S: Deserialize<'de>,
T: Deserialize<'de>,
impl<'de, S, T> Deserialize<'de> for Environments<S, T>where
S: Ord,
S: Deserialize<'de>,
T: Deserialize<'de>,
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl<'a, S, T> TryFrom<&'a ArgMatches<'a>> for Environments<S, T>where
T: DeserializeOwned + Serialize,
S: DeserializeOwned + Serialize + Ord + PartialOrd + TryFrom<String>,
Error: From<<S as TryFrom<String>>::Error>,
impl<'a, S, T> TryFrom<&'a ArgMatches<'a>> for Environments<S, T>where
T: DeserializeOwned + Serialize,
S: DeserializeOwned + Serialize + Ord + PartialOrd + TryFrom<String>,
Error: From<<S as TryFrom<String>>::Error>,
Auto Trait Implementations
impl<S, T> RefUnwindSafe for Environments<S, T>where
S: RefUnwindSafe,
T: RefUnwindSafe,
impl<S, T> Send for Environments<S, T>where
S: Send,
T: Send,
impl<S, T> Sync for Environments<S, T>where
S: Sync,
T: Sync,
impl<S, T> Unpin for Environments<S, T>
impl<S, T> UnwindSafe for Environments<S, T>where
S: RefUnwindSafe,
T: RefUnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more