Avoid trying to parse TokenStream outside of a proc macro
diff --git a/codegen/src/main.rs b/codegen/src/main.rs
index 833a85e..c874fb4 100644
--- a/codegen/src/main.rs
+++ b/codegen/src/main.rs
@@ -126,16 +126,17 @@
let features = get_features(&item.attrs, features.clone());
// Try to parse the AstItem declaration out of the item.
+ let tts = &item.mac.tts;
let found = if path_eq(&item.mac.path, &"ast_struct".into()) {
- syn::parse::<parsing::AstStruct>(item.mac.tts.clone().into())
+ syn::parse_str::<parsing::AstStruct>("e!(#tts).to_string())
.map_err(|_| err_msg("failed to parse ast_struct"))?
.0
} else if path_eq(&item.mac.path, &"ast_enum".into()) {
- syn::parse::<parsing::AstEnum>(item.mac.tts.clone().into())
+ syn::parse_str::<parsing::AstEnum>("e!(#tts).to_string())
.map_err(|_| err_msg("failed to parse ast_enum"))?
.0
} else if path_eq(&item.mac.path, &"ast_enum_of_structs".into()) {
- syn::parse::<parsing::AstEnumOfStructs>(item.mac.tts.clone().into())
+ syn::parse_str::<parsing::AstEnumOfStructs>("e!(#tts).to_string())
.map_err(|_| err_msg("failed to parse ast_enum_of_structs"))?
.0
} else {
@@ -210,9 +211,9 @@
option!(manual_extra_traits) >>
rest: syn!(TokenStream) >>
(AstItem {
- ast: syn::parse(quote! {
+ ast: syn::parse_str("e! {
pub struct #id #rest
- }.into())?,
+ }.to_string())?,
features: features.0,
eos_full: features.1,
})
@@ -286,9 +287,9 @@
None => quote!(#name),
}
});
- syn::parse(quote! {
+ syn::parse_str("e! {
pub enum #id { #(#variants),* }
- }.into())?
+ }.to_string())?
};
let mut items = vec![AstItem {
ast: enum_item,