[−][src]Function serde_with_expand_env::with_expand_envs
pub fn with_expand_envs<'de, T, D>(deserializer: D) -> Result<T, D::Error> where
D: Deserializer<'de>,
T: FromStr + Deserialize<'de>,
<T as FromStr>::Err: Display,
Deserializes a field expanding all the environment variables before the conversion
Example:
use std::env; use serde_json; use serde::Deserialize; use serde_with_expand_env::with_expand_envs; #[derive(Deserialize, Debug)] struct Test { #[serde(deserialize_with="with_expand_envs")] number: usize, #[serde(deserialize_with="with_expand_envs")] string: String, #[serde(deserialize_with="with_expand_envs")] default: usize, } let serialized = r#"{"number": "$NUMBER", "string": "my string: $STRING", "default": "${DEFAULT:-42}" }"#; // No envs set will fail with enviroment variable not found assert_eq!(serde_json::from_str::<Test>(&serialized).is_err(), true); env::set_var("NUMBER", "42"); env::set_var("STRING", "hacker"); let deserialized: Test = serde_json::from_str(&serialized).unwrap(); assert_eq!(deserialized.number, 42); assert_eq!(deserialized.string, "my string: hacker"); assert_eq!(deserialized.default, 42); env::set_var("DEFAULT", "4200"); let deserialized: Test = serde_json::from_str(&serialized).unwrap(); assert_eq!(deserialized.default, 4200); // Invalid number env::set_var("NUMBER", "cuarentaydos"); env::set_var("STRING", "42"); assert_eq!(serde_json::from_str::<Test>(&serialized).is_err(), true);