#toml-config #configuration #toml #proc-macro #macro-derive #macro #env-var

config-generator

从输入结构生成配置加载器的过程宏

5个版本

0.1.3 2024年1月22日
0.1.2 2024年1月21日
0.1.1 2024年1月21日
0.1.0 2024年1月21日
0.0.1 2024年1月21日

#479 in 配置

自定义许可

10KB

Config Generator

为Rust中的配置结构生成样板代码的派生宏。

安装和使用

要安装此crate,将其添加为依赖项

cargoadd config-generator

此外,需要serdetomlcrates来支持从toml加载。

cargoadd serde toml

要使用,定义一个包含配置变量的结构,这些变量将由生成的代码加载。 env_key注解定义一个环境变量键,该键将用于从环境加载变量。

use config_generator::ConfigGenerator;

#[derive(ConfigGenerator, Default)]
struct Config {
  #[env_key = "NAME_ENV_KEY"]
  pub name: String,
  #[env_key = "THREAD_COUNT"]
  pub thread_count: u32,
  #[env_key = "ALLOWED_ORIGINS"]
  pub allowed_origins: Vec<String>,
  #[env_key = "ASSETS_PATH"]
  pub assets_path: Option<String>,
}

生成的实现将允许从toml文件、环境或两者同时加载配置,已加载的变量将覆盖之前设置的变量。请注意,您需要实现一种方法来获取配置的初始状态(可能是在上面定义一个new方法或派生Default)。

// Loads a default config first from a toml file,
// then overlays environment variable values.
let config = Config::default()
  .with_toml("path/to/config.toml")
  .with_environment();

功能

默认情况下,启用了load_toml功能,在输入结构上提供with_toml函数实现,因此需要serdetomlcrates。此功能可以禁用,并且如果用户选择,可以删除这些crate。

致谢

此宏受optional_struct宏的启发,该宏也是学习如何在Rust中编写过程宏的有用资源。

依赖项

~295–750KB
~18K SLoC