Include token types in json file
diff --git a/codegen/src/parse.rs b/codegen/src/parse.rs
index 25b8ac1..cd43d60 100644
--- a/codegen/src/parse.rs
+++ b/codegen/src/parse.rs
@@ -19,7 +19,7 @@
type TokenLookup = BTreeMap<String, String>;
/// Parse the contents of `src` and return a list of AST types.
-pub fn parse() -> Vec<types::TypeDef> {
+pub fn parse() -> types::Definitions {
let mut item_lookup = BTreeMap::new();
load_file(SYN_CRATE_ROOT, &[], &mut item_lookup).unwrap();
@@ -49,10 +49,14 @@
);
}
- item_lookup
+ let types = item_lookup
.values()
.map(|item| introspect_item(item, &item_lookup, &token_lookup))
- .collect()
+ .collect();
+
+ let tokens = token_lookup.into_iter().map(|(name, ty)| (ty, name)).collect();
+
+ types::Definitions { types, tokens }
}
/// Data extracted from syn source
@@ -62,18 +66,18 @@
features: Vec<syn::Attribute>,
}
-fn introspect_item(item: &AstItem, items: &ItemLookup, tokens: &TokenLookup) -> types::TypeDef {
+fn introspect_item(item: &AstItem, items: &ItemLookup, tokens: &TokenLookup) -> types::Node {
let features = introspect_features(&item.features);
match &item.ast.data {
- Data::Enum(ref data) => types::TypeDef::Enum(introspect_enum(
+ Data::Enum(ref data) => types::Node::Enum(introspect_enum(
&item.ast.ident,
features,
data,
items,
tokens,
)),
- Data::Struct(ref data) => types::TypeDef::Struct(introspect_struct(
+ Data::Struct(ref data) => types::Node::Struct(introspect_struct(
&item.ast.ident,
features,
data,