13 releases (7 stable)

1.2.1 Feb 27, 2025
1.2.0 Feb 13, 2025
1.0.4 Dec 24, 2024
0.4.3 Oct 5, 2024
0.3.2 Aug 30, 2024

#188 in Configuration

Download history 1/week @ 2024-11-13 446/week @ 2024-12-04 61/week @ 2024-12-11 94/week @ 2024-12-18 56/week @ 2024-12-25 8/week @ 2025-01-08 92/week @ 2025-01-29 41/week @ 2025-02-05 149/week @ 2025-02-12 6/week @ 2025-02-19 166/week @ 2025-02-26

397 downloads per month
Used in 2 crates

MIT license

7KB

EnvMan: Environments (variables) Manager

EnvMan on crates.io EnvMan on docs.rs

EnvMan is a Rust crate that provides a procedural macro to simplify the management of environment variables. It allows you to automatically load and parse environment variables into your Rust structs, with support for default values, custom parsers, and more.

Features

  • Automatic Environment Variable Loading: Automatically load environment variables into struct fields.
  • Customizable Field Attributes: Use attributes to customize field names, parsers, default values, and more.
  • Support for Nested Structs: Easily manage nested configurations with support for nested structs.
  • Flexible Naming Conventions: Use rename_all, prefix, and suffix to control environment variable naming.

Usage

Here's a basic example demonstrating how to use EnvMan to manage environment variables:

use envman::EnvMan;
use std::net::IpAddr;

#[derive(EnvMan)]
struct Config {
    #[envman(rename = "APP_PORT", test = 8080)]
    port: u16,
    #[envman(nest)]
    database: DatabaseConfig,
}

#[derive(EnvMan)]
#[envman(prefix = "DB_",)]
struct DatabaseConfig {
    #[envman(default = "127.0.0.1", alltime_parse)]
    host: IpAddr,
    #[envman(default = 5432)]
    port: u16,
}

fn main() {
    unsafe {
        std::env::set_var("APP_PORT", "5000");
        std::env::set_var("DB_HOST", "192.168.1.1");
        std::env::set_var("DB_PORT", "5432");
    }
    
    // Load the configuration from environment variables
    let config = Config::load().expect("Failed to load configuration");

    // Assertions to verify the configuration
    assert_eq!(config.port, 5000);
    assert_eq!(config.database.host.to_string(), "192.168.1.1");
    assert_eq!(config.database.port, 5432);
}

Attributes

Struct Attributes

  • rename_all: Apply a naming convention to all fields (default: SCREAMING_SNAKE_CASE).
  • prefix: Add a prefix to all field names.
  • suffix: Add a suffix to all field names.

Field Attributes

  • rename: Specify a custom environment variable name for a field.
  • default: Provide a default value if the environment variable is not set.
  • parser: Use a custom parser function to parse the environment variable. (default: FromStr::from_str)
  • nest: Indicate that the field is a nested struct implementing EnvMan.
  • alltime_parse: Always use the specified parser to parse the environment variable, even if a default value is provided.

More Info

more info: doc.rs

License

Licensed under

Dependencies

~235–690KB
~16K SLoC