#![allow(clippy::missing_errors_doc, clippy::missing_panics_doc)]
#[macro_use]
extern crate cli_settings_derive;
#[derive(PartialEq, Debug)]
#[cli_settings]
#[cli_settings_file = "#[serde_with::serde_as]#[derive(serde::Deserialize)]"]
#[cli_settings_clap = "#[derive(clap::Parser)]#[command(version)]"]
pub struct Settings {
#[cli_settings_file]
#[cli_settings_clap = "#[arg(long)]"]
pub alpha: bool,
#[cli_settings_default = "\"beta default value\".to_string()"]
#[cli_settings_clap = "#[arg(long)]"]
pub beta: String,
#[cli_settings_default = "1 << 63"]
#[cli_settings_file]
pub gamma: u64,
#[cli_settings_default = "42"]
#[cli_settings_file]
pub delta: u32,
#[cli_settings_file]
#[cli_settings_clap = "#[arg(short, long)]"]
pub epsilon: u32,
}
#[test]
pub fn default() {
let expected = Settings {
alpha: false,
beta: "beta default value".to_string(),
gamma: 1 << 63,
delta: 42,
epsilon: 0,
};
assert_eq!(Settings::default(), expected);
}
#[test]
pub fn build() -> anyhow::Result<()> {
let expected = Settings {
alpha: false, beta: "something".to_string(), gamma: 728, delta: 32, epsilon: 1024, };
let project_dir = std::env::var("CARGO_MANIFEST_DIR")?;
let test_dir = std::path::Path::new(&project_dir).join("tests");
let cfg = Settings::build(
vec![
test_dir.join("usage1.yml"),
test_dir.join("usage-does-not-exist.yml"),
test_dir.join("usage2.yml"),
],
["test-bin", "--beta=something", "-e", "1024"],
)?;
assert_eq!(cfg, expected);
Ok(())
}