#env-var #environment #env #configuration #macro

itconfig-macro

轻松从环境变量构建配置并在全局范围内使用

5个稳定版本

1.1.1 2021年6月22日
1.1.0 2021年4月22日
1.0.2 2021年2月23日
1.0.1 2021年2月11日
1.0.0 2020年3月16日

34#env-variables

Download history 82/week @ 2024-03-11 146/week @ 2024-03-18 94/week @ 2024-03-25 94/week @ 2024-04-01 16/week @ 2024-04-08 38/week @ 2024-04-15 78/week @ 2024-04-22 78/week @ 2024-04-29 62/week @ 2024-05-06 44/week @ 2024-05-13 43/week @ 2024-05-20 10/week @ 2024-05-27 16/week @ 2024-06-03 15/week @ 2024-06-10 24/week @ 2024-06-17 24/week @ 2024-06-24

80 每月下载量
itconfig 中使用

MIT 许可证

29KB
535

itconfig

Build Status unsafe forbidden Documentation Crates.io Join the chat at https://gitter.im/icetemple/itconfig-rs Crates.io

轻松从环境变量构建配置并在全局范围内使用。

我们建议您从文档开始。

动机

我开始使用Rust进行Web编程,当时环境变量被广泛使用,通常有50多个。我首先查看已经创建的库。但那里需要初始化需要移动到每个需要变量的函数的结构。它使用少量的内存,但配置的生命周期与应用程序的生命周期一样长。因此,我决定创建自己的库。

安装

这些宏需要Rust编译器版本1.31或更高。

Cargo.toml中将以下内容作为依赖项添加:itconfig = { version = "1.0", features = ["macro"] }

Cargo.toml 示例

[package]
name = "my-crate"
version = "0.1.0"
authors = ["Me <[email protected]>"]

[dependencies]
itconfig = { version = "1.0", features = ["macro"] }

基本用法

use itconfig::config;
use std::env;
//use dotenv::dotenv;

config! {
    DEBUG: bool => false,

    #[env_name = "APP_HOST"]
    HOST: String => "127.0.0.1",

    database {
        URL < (
            "postgres://",
            POSTGRES_USERNAME => "user",
            ":",
            POSTGRES_PASSWORD => "pass",
            "@",
            POSTGRES_HOST => "localhost:5432",
            "/",
            POSTGRES_DB => "test",
        ),

        pool {
            MAX_SIZE: usize => 15,
        },
    },

    sentry {
        DSN: Option<&'static str>,
    },

    feature {
        static CORS: bool => false,

        static GRAPHQL_PLAYGROUND: bool => false,
    },
}

fn main () {
    // dotenv().expect("dotenv setup to be successful");
    // or
    env::set_var("FEATURE_CORS", "true");

    config::init();
    assert_eq!(config::HOST(), String::from("127.0.0.1"));
    assert_eq!(config::database::URL(), String::from("postgres://user:pass@localhost:5432/test"));
    assert_eq!(config::database::pool::MAX_SIZE(), 15);
    assert_eq!(config::sentry::DSN(), None);
    assert_eq!(config::feature::CORS(), true);
}

宏是可选功能,默认禁用。您可以使用此库而不使用宏

use itconfig::*;
use std::env;
// use dotenv::dotenv;

fn main() {
    // dotenv().expect("dotenv setup to be successful");
    // or
    env::set_var("DATABASE_URL", "postgres://127.0.0.1:5432/test");

    let database_url = get_env::<String>("DATABASE_URL").unwrap();
    let new_profile: bool = get_env_or_default("FEATURE_NEW_PROFILE", false);
    let articles_per_page: u32 = get_env_or_set_default("ARTICLES_PER_PAGE", 10);
}

运行测试

cargo test --all-features

可用功能

  • default - ["primitives"]
  • macro - 激活 config! 宏,以轻松配置Web应用程序。
  • primitives - 特性组:numbersbool
  • numbers - 特性组:intuintfloat
  • int - 特性组:i8i16i32i64i128isize
  • uint - 特性分组:u8u16u32u64u128usize
  • float - 特性分组:f32f64
  • i8 - 为 i8 类型实现 EnvString
  • i16 - 为 i16 类型实现 EnvString
  • i32 - 为 i32 类型实现 EnvString
  • i64 - 为 i64 类型实现 EnvString
  • i128 - 为 i128 类型实现 EnvString
  • isize - 为 isize 类型实现 EnvString
  • u8 - 为 u8 类型实现 EnvString
  • u16 - 为 u16 类型实现 EnvString
  • u32 - 为 u32 类型实现 EnvString
  • u64 - 为 u64 类型实现 EnvString
  • u128 - 为 u128 类型实现 EnvString
  • usize - 为 usize 类型实现 EnvString
  • f32 - 为 f32 类型实现 EnvString
  • f64 - 为 f64 类型实现 EnvString
  • bool - 为 bool 类型实现 EnvString
  • json_array - 为 vector 类型添加 EnvString 实现(使用可选的 serde_json 包)。⚠ 已弃用

许可证

MIT © Ice Temple

贡献者

pleshevskiy(Dmitriy Pleshevskiy) – 创建者,维护者。

依赖

~1.5MB
~35K SLoC