1
0
mirror of https://github.com/fluencelabs/wasm-bindgen synced 2025-07-27 01:51:56 +00:00

web-sys: Don't remove dictionaries if required fields are removed

This commit updates the conditional binding generation for dictionaries
to ensure that a dictionary is not entirely removed if any of its
required fields are removed. If a required field is removed, however, it
cannot be constructed, so the constructor is removed.
This commit is contained in:
Alex Crichton
2019-06-03 12:56:18 -07:00
parent 618b5d3531
commit 877c31cdc8
4 changed files with 22 additions and 17 deletions
crates

@@ -1282,6 +1282,18 @@ impl ToTokens for ast::Dictionary {
let required_names2 = required_names;
let required_names3 = required_names;
let ctor = if self.ctor {
quote! {
pub fn new(#(#required_names: #required_types),*) -> #name {
let mut _ret = #name { obj: ::js_sys::Object::new() };
#(_ret.#required_names2(#required_names3);)*
return _ret
}
}
} else {
quote! {}
};
let const_name = Ident::new(&format!("_CONST_{}", name), Span::call_site());
(quote! {
#[derive(Clone, Debug)]
@@ -1293,12 +1305,7 @@ impl ToTokens for ast::Dictionary {
#[allow(clippy::all)]
impl #name {
pub fn new(#(#required_names: #required_types),*) -> #name {
let mut _ret = #name { obj: ::js_sys::Object::new() };
#(_ret.#required_names2(#required_names3);)*
return _ret
}
#ctor
#methods
}