GitXplorerGitXplorer
g

clap_config

public
5 stars
0 forks
0 issues

Commits

List of commits on branch main.
Verified
0f6a59d2057c7c25b82b663ea028d177bb34f606

chore: bump lockfile version to 0.1.1 too

ggibfahn committed 6 months ago
Verified
648a25ad42ce97a02d643f9295ae0afb2a7a60fe

docs(readme): add more TODOs

ggibfahn committed 6 months ago
Verified
10565e3428153ae707357e6921037ac2de832e9c

chore: bump version to 0.1.1

ggibfahn committed 6 months ago
Verified
418b78934f1a357453e7d3b2aa2382c6e6ca1ebb

fix: skip serializing if none

ggibfahn committed 9 months ago
Verified
3d8c3b9c7078c9ace909caa85688c23b93a68f11

fix(config): default member visibility to pub

ggibfahn committed 9 months ago
Verified
59f13914ae1e50f8d170a18b8fa846e57c29853f

docs(readme): update 1-sentence overview

ggibfahn committed 10 months ago

README

The README file for this repository.

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
  • support clap aliases
  • Support Box<SubCommandOpts>
  • Support generating a config file spec with schemars
  • Copy docstring from parent struct.