3 个不稳定版本

0.2.0 2024 年 6 月 24 日
0.1.1 2024 年 6 月 19 日
0.1.0 2024 年 6 月 11 日

#1033Rust 模式

MIT 许可证

14KB
347

Ground Env

ground-env 是一个 Rust 包,提供了一种方便的方式将环境变量加载到你的结构体中。它使用自定义 derive 宏自动将环境变量映射到结构体字段,支持各种功能,如重命名字段、默认值、扁平化嵌套结构体和不同分隔符的处理。

功能

  • 简单映射:直接将环境变量映射到结构体字段。
  • 可选字段:无缝处理可选环境变量。
  • 重命名:将结构体字段名称重命名为所需的环境变量。
  • 默认值:如果环境变量缺失,为字段定义默认值。
  • 扁平化:扁平化嵌套结构体。
  • 向量:使用自定义分隔符解析环境变量到向量中。
  • 错误处理:优雅地处理缺失的必需字段和无效数据类型。

用法

ground-env 添加到你的 Cargo.toml

[dependencies]
ground-env = "0.1.0"

使用宏 #[derive(FromEnv)] 注释你的结构体,并使用属性配置映射

#[derive(FromEnv)]
struct Config {
    text: String,
    optional_text: Option<String>,
    // The default delimiter is set to ","
    list: Vec<String>,
    #[env(delimiter = " ")] // But you can customise it.
    names: Vec<String>,
    number: i64,
    // Supports renaming.
    #[env(rename = "EMAIL_ADDRESS")]
    email: String,
    #[env(default)] // Defaults to 0 when no explicit value is provided.
    count: i64,
    #[env(default = "64")] // Defaults to 64 when not provided.
    background_tasks: i64,
    #[env(flatten)] // You can flatten other structs 
    admin_credentials: Credentials,
    #[env(flatten = "DB_")] // You can also provide a prefix.
    db_args: Credentials,
}

#[derive(FromEnv)]
struct Credentials {
    username: String,
    password: String,
}

fn main() -> anyhow::Result<()> {
    let t = Config::from_env()?;
    Ok(())
}

许可证

本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。

依赖

~0.6–1MB
~23K SLoC