StructConf is a small derive macro that allows you to combine argument parsing from clap and config file parsing from rust-ini at compile time. It's inspired by the argument parser structopt.
StructConf aims to be relatively small and simple. Here are its current selling points:
- Options available in the config file, argument parser, both, or none.
- Configurable option names.
- Custom types supported.
- Optional fields with
Option
. - Custom default expressions.
- Insightful error messages.
- Thoroughly tested.
Small example:
use structconf::{clap, StructConf};
#[derive(Debug, StructConf)]
struct ServerConfig {
#[conf(help = "The public key")]
pub public_key: String,
#[conf(no_file, long = "your-secret", help = "Your secret API key")]
pub secret_key: String,
#[conf(default = "100", help = "timeout in seconds")]
pub timeout: i32,
}
pub fn main() {
let app = clap::App::new("demo");
let conf = ServerConfig::parse(app, "config.ini");
println!("Parsed config: {:#?}", conf);
}
For more details on how to use Structconf, read the docs and check out the examples.