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>(&quote!(#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>(&quote!(#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>(&quote!(#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(&quote! {
                 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(&quote! {
                         pub enum #id { #(#variants),* }
-                    }.into())?
+                    }.to_string())?
                 };
                 let mut items = vec![AstItem {
                     ast: enum_item,