in uniffi_bindgen/src/interface/record.rs [186:233]
fn test_multiple_record_types() {
const UDL: &str = r#"
namespace test{};
dictionary Empty {};
dictionary Simple {
u32 field;
};
dictionary Complex {
string? key;
u32 value = 0;
required boolean spin;
};
"#;
let ci = ComponentInterface::from_webidl(UDL, "crate_name").unwrap();
assert_eq!(ci.record_definitions().count(), 3);
let record = ci.get_record_definition("Empty").unwrap();
assert_eq!(record.name(), "Empty");
assert_eq!(record.fields().len(), 0);
let record = ci.get_record_definition("Simple").unwrap();
assert_eq!(record.name(), "Simple");
assert_eq!(record.fields().len(), 1);
assert_eq!(record.fields()[0].name(), "field");
assert_eq!(record.fields()[0].as_type(), Type::UInt32);
assert!(record.fields()[0].default_value().is_none());
let record = ci.get_record_definition("Complex").unwrap();
assert_eq!(record.name(), "Complex");
assert_eq!(record.fields().len(), 3);
assert_eq!(record.fields()[0].name(), "key");
assert_eq!(
record.fields()[0].as_type(),
Type::Optional {
inner_type: Box::new(Type::String)
},
);
assert!(record.fields()[0].default_value().is_none());
assert_eq!(record.fields()[1].name(), "value");
assert_eq!(record.fields()[1].as_type(), Type::UInt32);
assert!(matches!(
record.fields()[1].default_value(),
Some(Literal::UInt(0, Radix::Decimal, Type::UInt32))
));
assert_eq!(record.fields()[2].name(), "spin");
assert_eq!(record.fields()[2].as_type(), Type::Boolean);
assert!(record.fields()[2].default_value().is_none());
}