Expand description
This crate provides the EnvField<T>
type capable of deserializing the T
type
from a string with environment variables expanded.
During deserialization, the EnvField
will try to deserialize the data as a string and expand all
the environment variables. After the expansion, the resulting string will be used
to construct the T
value.
By default, the EnvField
will construct the T
value using the FromStr
trait.
However, it is possible to make it use the Deserialize
trait using the UseDeserialize
marker.
If the supplied data was not a string, the EnvField
will attempt to deserialize the T
type directly from the data.
The EnvField
works nicely with Option
, Vec
, and #[serde(default)]
.
Also, the crate provides the env_field_wrap
attribute that wraps
all the fields of a struct or an enum with the EnvField
type.
The attribute also honors the optional and vector fields.
§EnvField
Example
#[derive(Serialize, Deserialize)]
struct Example {
name: EnvField<String>,
size: EnvField<usize>,
num: EnvField<i32>,
}
std::env::set_var("SIZE", "100");
let de: Example = toml::from_str(r#"
name = "${NAME:-Default Name}"
size = "$SIZE"
num = 42
"#).unwrap();
assert_eq!(&de.name, "Default Name");
assert_eq!(de.size, 100);
assert_eq!(de.num, 42);
§env_field_wrap
Example
#[env_field_wrap]
#[derive(Serialize, Deserialize)]
struct Example {
name: String,
size: usize,
num: i32,
}
std::env::set_var("SIZE", "100");
let de: Example = toml::from_str(r#"
name = "${NAME:-Default Name}"
size = "$SIZE"
num = 42
"#).unwrap();
assert_eq!(&de.name, "Default Name");
assert_eq!(de.size, 100);
assert_eq!(de.num, 42);
See the description of the EnvField
and the env_field_wrap
for details.
Structs§
- EnvField
- A field that deserializes either as
T
or asString
with all environment variables expanded via theshellexpand
crate. - UseDeserialize
- A marker type for passing into the
EnvField<T>
type as a second parameter. - UseFrom
Str - A marker type for passing into the
EnvField<T>
type as a second parameter.
Attribute Macros§
- env_
field_ wrap - The
env_field_wrap
wraps all the fields of a struct or an enum with theEnvField
type.