blob: 616a1d47a85dc6fa3f0ad473feec1e1a37c39ed8 [file] [log] [blame]
// SPDX-FileCopyrightText: 2020 Robin Krahl <[email protected]>
// SPDX-License-Identifier: CC0-1.0
use merge::Merge;
use serde::Deserialize;
use structopt::StructOpt;
#[derive(Debug, Default, Deserialize, Merge, StructOpt)]
#[serde(default)]
struct Args {
#[structopt(short, long)]
#[merge(strategy = merge::bool::overwrite_false)]
debug: bool,
input: Option<String>,
output: Option<String>,
}
fn get_config() -> Option<Args> {
let path: &std::path::Path = "args.toml".as_ref();
if path.is_file() {
let s = std::fs::read_to_string(path).expect("Could not read configuration file");
Some(toml::from_str(&s).expect("Could not parse configuration"))
} else {
None
}
}
fn get_env() -> Args {
envy::prefixed("ARGS_")
.from_env()
.expect("Could not read environment variables")
}
fn main() {
let mut args = Args::from_args();
args.merge(get_env());
if let Some(config) = get_config() {
args.merge(config);
}
println!("{:?}", args);
}