Generate enum js code

This commit is contained in:
Ryan Levick
2018-02-22 12:01:38 +01:00
parent 45543c545e
commit f11121b095
3 changed files with 55 additions and 7 deletions

View File

@ -327,17 +327,24 @@ impl Program {
a.fields(&[
("exports", &|a| a.list(&self.exports, Export::wbg_literal)),
("imports", &|a| a.list(&self.imports, Import::wbg_literal)),
("enums", &|a| a.list(&self.enums, Enum::wbg_literal)),
("custom_type_names", &|a| {
let names = self.exports.iter()
let struct_descriptors = self.exports.iter()
.filter_map(|e| e.class)
.chain(self.structs.iter().map(|s| s.name))
.chain(self.enums.iter().map(|s| s.name))
.collect::<BTreeSet<_>>();
a.list(&names, |s, a| {
let val = shared::name_to_descriptor(s.as_ref());
.map(|n| {
let val = shared::name_to_descriptor(n.as_ref());
(val, n.to_string())
});
let enum_descriptors = self.enums.iter().map(|e| {
(shared::TYPE_ENUM, e.name.to_string())
});
let descriptors = struct_descriptors.chain(enum_descriptors).collect::<BTreeSet<_>>();
a.list(&descriptors, |s, a| {
a.fields(&[
("descriptor", &|a| a.char(val)),
("name", &|a| a.str(s.as_ref()))
("descriptor", &|a| a.char(s.0)),
("name", &|a| a.str(&s.1))
]);
})
}),
@ -665,6 +672,19 @@ impl Import {
}
}
impl Enum {
fn wbg_literal(&self, a: &mut LiteralBuilder) {
a.fields(&[
("name", &|a| a.str(self.name.as_ref())),
("variants", &|a| a.list(&self.variants, |v, a| {
a.fields(&[
("name", &|a| a.str(v.as_ref()))
])
})),
]);
}
}
impl Struct {
fn from(s: syn::ItemStruct, _opts: BindgenAttrs) -> Struct {
Struct { name: s.ident }