use facet::Facet;
use facet_reflect::Partial;
use facet_testhelpers::test;
use std::collections::HashMap;
#[test]
fn deferred_map_value_missing_required_field() {
#[derive(Facet, Debug)]
struct RuleValue {
required: String,
}
#[derive(Facet, Debug)]
struct Container {
rules: HashMap<String, RuleValue>,
}
let mut partial = Partial::alloc::<Container>().unwrap();
partial = partial.begin_deferred().unwrap();
partial = partial.begin_field("rules").unwrap();
partial = partial.init_map().unwrap();
partial = partial.begin_key().unwrap();
partial = partial.set(String::from("ZeroOperand")).unwrap();
partial = partial.end().unwrap();
partial = partial.begin_value().unwrap();
partial = partial.end().unwrap(); partial = partial.end().unwrap();
let result = partial.finish_deferred();
assert!(
result.is_err(),
"expected Err from missing required field, got Ok"
);
}
#[test]
fn deferred_map_value_deep_box_enum_missing_field() {
#[derive(Facet, Debug)]
struct InnerWithRequired {
#[allow(dead_code)]
required: String,
}
#[derive(Facet, Debug)]
#[repr(u8)]
#[allow(dead_code)]
enum SyntaxExpr {
Template(Box<InnerWithRequired>),
}
#[derive(Facet, Debug)]
struct TemplateDecl {
#[allow(dead_code)]
syntax: SyntaxExpr,
}
#[derive(Facet, Debug)]
struct Container {
#[allow(dead_code)]
templates: HashMap<String, TemplateDecl>,
}
let mut partial = Partial::alloc::<Container>().unwrap();
partial = partial.begin_deferred().unwrap();
partial = partial.begin_field("templates").unwrap();
partial = partial.init_map().unwrap();
partial = partial.begin_key().unwrap();
partial = partial.set(String::from("ZeroOperand")).unwrap();
partial = partial.end().unwrap();
partial = partial.begin_value().unwrap(); partial = partial.begin_field("syntax").unwrap(); partial = partial.select_variant_named("Template").unwrap();
partial = partial.begin_nth_field(0).unwrap(); partial = partial.begin_smart_ptr().unwrap(); partial = partial.end().unwrap(); partial = partial.end().unwrap(); partial = partial.end().unwrap(); partial = partial.end().unwrap(); partial = partial.end().unwrap();
let result = partial.finish_deferred();
assert!(
result.is_err(),
"expected Err from missing required field, got Ok"
);
}