Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gibfahn/clap_config
Serde config file support for clap
https://github.com/gibfahn/clap_config
Last synced: about 1 month ago
JSON representation
Serde config file support for clap
- Host: GitHub
- URL: https://github.com/gibfahn/clap_config
- Owner: gibfahn
- License: apache-2.0
- Created: 2024-03-07T12:24:28.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-07-26T20:42:16.000Z (5 months ago)
- Last Synced: 2024-10-07T17:36:21.535Z (3 months ago)
- Language: Rust
- Size: 76.2 KB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
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
```rust
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 = ::command().get_matches();
// Build an instance of the auto-generated 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`
- Support generating a config file spec with [schemars](https://docs.rs/schemars)
- Copy docstring from parent struct.