#serde-json #environment #debugging #env #serde #found #hacker #42 #deserialize-with #with-expand-envs

serde-with-expand-env

Parse environment variables in serde crate using deserialize_with

3 releases (stable)

1.1.0 Feb 21, 2020
1.0.0 Dec 31, 2019
0.1.0 Dec 13, 2019

#2555 in Parser implementations

Download history 650/week @ 2024-12-15 321/week @ 2024-12-22 1393/week @ 2024-12-29 1224/week @ 2025-01-05 2340/week @ 2025-01-12 762/week @ 2025-01-19 742/week @ 2025-01-26 1573/week @ 2025-02-02 406/week @ 2025-02-09 1577/week @ 2025-02-16 1612/week @ 2025-02-23 4924/week @ 2025-03-02 5864/week @ 2025-03-09 5457/week @ 2025-03-16 4491/week @ 2025-03-23 2853/week @ 2025-03-30

19,095 downloads per month
Used in 20 crates (4 directly)

MIT license

7KB

serde-with-expand-env

Build Status MIT licensed

Parse environment variables in serde crate using deserialize_with.

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,
}

fn main() {
    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);
}

more examples in examples

Dependencies

~0.4–1.3MB
~25K SLoC