serde-env-field

Crates.ioserde-env-field
lib.rsserde-env-field
version0.3.2
sourcesrc
created_at2023-10-26 01:37:06.501525
updated_at2023-11-07 04:03:28.73051
descriptionA helper for serde deserialization with environment variables expansion
homepage
repositoryhttps://github.com/mrshiposha/serde-env-field
max_upload_size
id1013951
size69,499
Daniel Shiposha (mrshiposha)

documentation

https://docs.rs/serde-env-field/latest/serde_env_field/

README

serde-env-field

CI

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 documentation of the EnvField and the env_field_wrap for details.

Commit count: 39

cargo fmt