Remove codegen State types
diff --git a/codegen/src/gen.rs b/codegen/src/gen.rs
index fd77d0d..62de202 100644
--- a/codegen/src/gen.rs
+++ b/codegen/src/gen.rs
@@ -1,6 +1,6 @@
 use inflections::Inflect;
-use proc_macro2::{Ident, Span};
-use syn_codegen as types;
+use proc_macro2::{Ident, Span, TokenStream};
+use syn_codegen::{Data, Features, Definitions, Node};
 
 pub const TERMINAL_TYPES: &[&str] = &["Span", "Ident"];
 
@@ -8,22 +8,22 @@
     Ident::new(&name.to_snake_case(), Span::call_site())
 }
 
-pub fn traverse<S, F>(defs: &types::Definitions, node: F) -> S
-where
-    S: Default,
-    F: Fn(&mut S, &types::Node, &types::Definitions),
-{
-    let mut state = S::default();
+pub fn traverse(
+    defs: &Definitions,
+    node: fn(&mut TokenStream, &mut TokenStream, &Node, &Definitions),
+) -> (TokenStream, TokenStream) {
+    let mut traits = TokenStream::new();
+    let mut impls = TokenStream::new();
     for s in &defs.types {
-        node(&mut state, s, defs);
+        node(&mut traits, &mut impls, s, defs);
     }
     for tt in TERMINAL_TYPES {
-        let s = types::Node {
+        let s = Node {
             ident: tt.to_string(),
-            features: types::Features::default(),
-            data: types::Data::Private,
+            features: Features::default(),
+            data: Data::Private,
         };
-        node(&mut state, &s, defs);
+        node(&mut traits, &mut impls, &s, defs);
     }
-    state
+    (traits, impls)
 }