Consolidate Operand code
diff --git a/codegen/src/visit.rs b/codegen/src/visit.rs
index 818ad61..9f85df9 100644
--- a/codegen/src/visit.rs
+++ b/codegen/src/visit.rs
@@ -1,3 +1,4 @@
+use crate::operand::*;
 use crate::{file, full, gen};
 use inflections::Inflect;
 use proc_macro2::{Span, TokenStream};
@@ -17,35 +18,6 @@
     Ident::new(&name.to_snake_case(), Span::call_site())
 }
 
-enum Operand {
-    Borrowed(TokenStream),
-    Owned(TokenStream),
-}
-
-use self::Operand::*;
-
-impl Operand {
-    fn tokens(&self) -> &TokenStream {
-        match self {
-            Borrowed(n) | Owned(n) => n,
-        }
-    }
-
-    fn ref_tokens(&self) -> TokenStream {
-        match self {
-            Borrowed(n) => n.clone(),
-            Owned(n) => quote!(&#n),
-        }
-    }
-
-    fn owned_tokens(&self) -> TokenStream {
-        match self {
-            Borrowed(n) => quote!(*#n),
-            Owned(n) => n.clone(),
-        }
-    }
-}
-
 fn simple_visit(item: &str, name: &Operand) -> TokenStream {
     let ident = under_name(item);
     let method = Ident::new(&format!("visit_{}", ident), Span::call_site());