clap_config

Crates.ioclap_config
lib.rsclap_config
version0.1.1
sourcesrc
created_at2024-03-28 13:44:49.006602
updated_at2024-07-22 15:21:39.284688
descriptionAutomatically merge CLI args, environment variables, config files, and default values in clap apps.
homepage
repositoryhttps://github.com/gibfahn/clap_config
max_upload_size
id1189054
size23,290
Gibson Fahnestock (gibfahn)

documentation

README

Clap Config

Automatically merge CLI args, environment variables, config files, and default values in clap apps.

The goal is to be easy to use, and to leave all the clap configuration for clap to deal with, while removing boilerplate around creating the config struct and merging it with the clap one.

Usage

use clap::CommandFactory;
use clap::Parser;
use clap_config::ClapConfig;
use std::fs;

#[derive(ClapConfig, Parser, Debug)]
pub struct Opts {
    #[clap(long)]
    flag: String,
}

// You can use any file format that implements Deserialize.
let config_str = fs::read_to_string("/path/to/config.yaml").unwrap();

// Build an ArgMatches so we can see where each value comes from.
let matches = <Opts as CommandFactory>::command().get_matches();
// Build an instance of the auto-generated <YourStruct>Config struct
let config: OptsConfig = serde_yaml::from_str(&config_str).unwrap();

// Merge the two together into your actual struct.
let opts = Opts::from_merged(matches, Some(config));

Todos

  • Set serde flags like #[serde(rename_all = "kebab-case", deny_unknown_fields)] on the generated struct.
  • Set required arguments in the config file.
  • Set positional arguments in the config file
Commit count: 23

cargo fmt