3个不稳定版本
0.2.1 | 2024年5月1日 |
---|---|
0.2.0 | 2024年5月1日 |
0.1.0 | 2024年1月19日 |
#121 in 配置
23,258每月下载量
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