#config-file #clap #adapter #clap-parser #config-parser #path #loading

clap-adapters

用于解析配置文件的clap适配器,非常方便

3个不稳定版本

0.2.1 2024年5月1日
0.2.0 2024年5月1日
0.1.0 2024年1月19日

#121 in 配置

Download history 72/week @ 2024-05-02 1/week @ 2024-05-16 8/week @ 2024-05-30 5671/week @ 2024-06-06 11754/week @ 2024-06-13 13818/week @ 2024-06-20 15466/week @ 2024-06-27 7103/week @ 2024-07-04 6099/week @ 2024-07-11 7099/week @ 2024-07-18 6029/week @ 2024-07-25 6479/week @ 2024-08-01 5020/week @ 2024-08-08 4500/week @ 2024-08-15

23,258每月下载量

MIT/Apache

29KB
298 代码行

clap-adapters

使用clap声明式加载配置的适配器类型

你知道吗?任何实现了FromStr的类型都可以在clap derive 结构体中使用?这意味着你可以将任何可以放入 fn(&str) -> Result<T, Error> 的逻辑在解析时运行。这对于声明式选择配置文件或做其他酷炫的事情特别有用。看看这个

use clap::Parser;
use clap_adapters::prelude::*;

#[derive(Debug, Parser)]
struct Cli {
    /// Path to a config file of arbitrary Json
    #[clap(long)]
    config: PathTo<JsonOf<serde_json::Value>>,
}

fn main() {
    // Create a config file in a temporary directory
    let config_dir = tempfile::tempdir()?;
    let config_path = config_dir.path().join("config.json");
    let config_path_string = config_path.display().to_string();

    // Write a test config of {"hello":"world"} to the config file
    let config = serde_json::json!({"hello": "world"});
    let config_string = serde_json::to_string(&config)?;
    std::fs::write(&config_path, &config_string)?;

    // Parse our CLI, passing our config file path to --config
    let cli = Cli::parse_from(["app", "--config", &config_path_string]);
    let data = cli.config.data();

    // We should expect the value we get to match what we wrote to the config
    assert_eq!(data, &serde_json::json!({"hello":"world"}));
}

扩展clap-adapters

你可以通过定义实现此crate中特质的新类型来实现额外的可组合适配器。例如,通过实现 FromReader,你可以定义一个可以从文件路径构建自己的适配器,将你的适配器嵌套到 PathTo<T> 中,例如 PathTo<YourAdapter>

依赖关系

~4–16MB
~163K SLoC