Env Settings

Env Settings is a Rust library that helps you to initialize structs using environment variables

This Rust library took inspiration from pydantic's BaseSettings Python class

Installation

shell cargo add env-settings cargo add env-settings-derive

Usage

When you add the EnvSettings derive to a struct, two methods are added to it

Basic

shell export name=paolo export favourite_number=42

```rust use envsettingsderive::EnvSettings;

[derive(EnvSettings)]

struct MyStruct { name: String,

favourite_number: u8,

}

fn main() { let mystruct = MyStruct::fromenv().unwrap(); asserteq!(mystruct.name, "paolo".tostring()); asserteq!(mystruct.favouritenumber, 42);

let name = "luca";
let my_struct = MyStruct::new(Some(name.to_string()), None).unwrap();
assert_eq!(my_struct.name, name);
assert_eq!(my_struct.favourite_number, 42);

} ```

Advanced

shell echo "MY_STRUCT_FAVOURITE_NUMBER=42\n" > .env export MY_BIRTH_DATE=01/01/1970

```rust use envsettingsderive::EnvSettings;

[derive(EnvSettings)]

[envsettings(caseinsensitive, filepath = ".env", prefix="MYSTRUCT_")]

struct MyStruct { #[env_settings(default = "paolo")] name: String,

favourite_number: u8,

#[env_settings(variable = "MY_BIRTH_DATE")]
birth_date: String,

birth_place: Option<String>,

#[env_settings(skip)]
friends: Vec<String>,

}

fn main() { let friends = vec!["luca".tostring()]; let mystruct = MyStruct::fromenv(friends.clone()).unwrap(); asserteq!(mystruct.name, "paolo".tostring()); asserteq!(mystruct.favouritenumber, 42); asserteq!(mystruct.birthdate, "01/01/1970"); asserteq!(mystruct.birthplace, None); asserteq!(my_struct.friends, friends);

let name = "luca";
let my_struct = MyStruct::new(
    Some(name.to_string()),
    None,
    None,
    Some("london".to_string()),
    friends.clone(),
).unwrap();
assert_eq!(my_struct.name, name);
assert_eq!(my_struct.favourite_number, 42);
assert_eq!(my_struct.birth_date, "01/01/1970");
assert_eq!(my_struct.birth_place, Some("london".to_string()));
assert_eq!(my_struct.friends, friends);

} ```

Parameters

Struct

The current supported parameters for the structs are:

Field

The current supported parameters for the fields are:

Variables resolution hierarchy

  1. Arguments passed to the new method (if using new).
  2. Environment variables
  3. Variables loaded from a file (e.g. .env)
  4. Default values

Contribute

Before starting to work on a contribution please read:

Run tests

When testing run:

shell cargo test -- --test-threads=1

to prevent tests from competitively interacting with the same file

License

This project is licensed under the terms of the MIT or Apache 2.0 license.