#env-var #env #serde #serde-derive #struct #host #timeout

de_env

Deserialize environment variables into a struct

1 stable release

1.0.0 May 7, 2022
1.0.0-rc.2 May 5, 2022
0.1.0 May 1, 2022

#1890 in Encoding

Download history 22/week @ 2024-04-12 11/week @ 2024-04-19 14/week @ 2024-04-26 28/week @ 2024-05-03 17/week @ 2024-05-10 45/week @ 2024-05-17 17/week @ 2024-05-24 43/week @ 2024-05-31 31/week @ 2024-06-07 43/week @ 2024-06-14 100/week @ 2024-06-21 41/week @ 2024-06-28 45/week @ 2024-07-05 51/week @ 2024-07-12 66/week @ 2024-07-19 81/week @ 2024-07-26

243 downloads per month

MIT license

25KB
559 lines

de_env helps you easily deserialize environment variables into a struct.

Example

Assuming we have a TIMEOUT, HOST and RETRY environment variable:

#[derive(serde::Deserialize, Debug)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
struct Config {
    timeout: u16,
    host: std::net::IpAddr,
    retry: bool,
}

let config: Config = de_env::from_env()?;

println!("{config:#?}");

lib.rs:

de_env

Deserialize environment variables into a struct.


You may be looking for:

Example

Assuming we have a TIMEOUT and HOST environment variable:

#[derive(serde::Deserialize, Debug)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
struct Config {
    timeout: u16,
    host: std::net::IpAddr,
}

let config: Config = de_env::from_env()?;

println!("{config:#?}");

Supported Primitives

  • String slices
  • Chars
  • Numbers (parsed with their respective FromStr implementations)
  • Booleans (see boolean parsing)

Boolean Parsing

Boolean parsing is case-insensitive.

If the truthy-falsy feature is enabled (default):

  • Truthy values:
    • true or its shorthand t
    • yes or its shorthand y
    • on
    • 1
  • Falsy values:
    • false or its shorthand f
    • no or its shorthand n
    • off
    • 0

If the truthy-falsy feature is disabled, only true and false are considered valid booleans.

Enums

Only unit variants can be deserialized.

Assuming we have a LOG_LEVEL environment variable set to INFO or WARN:

#[derive(serde::Deserialize, Debug)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
enum Level {
    Info,
    Warn
}

#[derive(serde::Deserialize, Debug)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
struct Config {
    log_level: Level,
}

let config: Config = de_env::from_env()?;

println!("{config:#?}");

Unsupported Types

The goal of this crate is to deserialize environment variables into a struct, no other type is supported at top level. Custom types must be able to deserialize from supported primitives.

Dependencies

~110–345KB