use crate::assert_diag_snapshot;
use facet::Facet;
use figue::{self as args, Driver, builder};
#[derive(Facet, Debug)]
struct Args {
#[facet(args::config, args::env_prefix = "TEST")]
config: TestConfig,
}
#[derive(Facet, Debug)]
struct TestConfig {
field_set: String,
#[facet(default = 42)]
field_with_default: i32,
field_required: String,
}
#[test]
fn test_schema_default_vs_missing() {
let config_json = r#"{
"config": {
"field_set": "hello"
}
}"#;
let config = builder::<Args>()
.unwrap()
.file(|f| f.content(config_json, "config.json"))
.build();
let driver = Driver::new(config);
let err = driver.run().unwrap_err();
assert_diag_snapshot!(err);
}
#[derive(Facet, Debug)]
struct ArgsMultipleDefaults {
#[facet(args::config, args::env_prefix = "MULTI")]
config: MultiDefaultConfig,
}
#[derive(Facet, Debug)]
struct MultiDefaultConfig {
required_string: String,
#[facet(default = "default_value")]
default_string: String,
#[facet(default = 100)]
default_int: i32,
#[facet(default = true)]
default_bool_true: bool,
#[facet(default)]
default_bool_false: bool,
}
#[test]
fn test_schema_multiple_default_types() {
let config_json = r#"{"config": {}}"#;
let config = builder::<ArgsMultipleDefaults>()
.unwrap()
.file(|f| f.content(config_json, "config.json"))
.build();
let driver = Driver::new(config);
let err = driver.run().unwrap_err();
assert_diag_snapshot!(err);
}