#layered #serde #layer #load #string #source

layeredconf

分层配置文件,使用serde反序列化

9个版本

0.2.3 2022年1月22日
0.2.2 2022年1月22日
0.2.1 2021年12月8日
0.1.4 2021年12月7日

1498编码 中排名

Download history 16/week @ 2024-07-02 67/week @ 2024-07-23

每月下载量 67

MIT 许可证

23KB
436

Rust Crates.io Crates.io docs.rs

LayeredConf

又一个配置包

未来

希望这个包对某些人有用。即将到来的功能

  • 更多文档
  • 功能

功能

  • 从多个来源生成配置层:文件、字符串、命令行参数...
  • 使用Clap自动生成命令行帮助和用法信息
  • Clap的大部分 derive 功能都可以使用
  • 可以在配置文件中定义要加载的进一步配置文件,或在命令行选项中定义

快速示例

layeredconfclapserde 添加到您的 Cargo.toml

[dependencies]
layeredconf = "0.2.0"
clap = "3.0.0-beta.5"
serde = { version = "1.0", features = ["derive"] }

定义您的配置

use layeredconf::{Builder, Format, LayeredConf, Source};
use serde::Deserialize;

#[derive(LayeredConf, Deserialize)]
struct Config {
    /// Will also load this config file
    #[layered(load_config)]
    #[clap(long)]
    config: Option<std::path::PathBuf>,

    /// Required to be set in at least one Layer (config file, command line, etc.)
    #[clap(long)]
    name: String,

    /// Optional field
    #[clap(long)]
    input: Option<String>,

    /// Defaulted field
    #[layered(default)]
    #[clap(long)]
    number: u32,
}

fn main() -> anyhow::Result<()> {
    let config: Config = Builder)::new()
        .new_layer(Source::OptionalFile {
            path: "/etc/my_app/config.yaml",
            format: Format::Auto,
        })
        .new_layer(Source::File {
            path: "relative/config.yaml",
            format: Format::Auto,
        })
        .new_layer(Source::Arguments)
        .solidify()?;

    // Use config in your application
}

依赖项

~5MB
~103K SLoC