Avoid conflicting imports in generated code
diff --git a/codegen/src/main.rs b/codegen/src/main.rs
index 1c199f1..c44598f 100644
--- a/codegen/src/main.rs
+++ b/codegen/src/main.rs
@@ -727,11 +727,6 @@
         // XXX:  This part is a disaster - I'm not sure how to make it cleaner though :'(
         match s.ast.body {
             Body::Enum(ref e) => {
-                let use_decl = format!("    use ::{}::*;\n", s.ast.ident);
-                state.visit_impl.push_str(&use_decl);
-                state.visit_mut_impl.push_str(&use_decl);
-                state.fold_impl.push_str(&use_decl);
-
                 state.visit_impl.push_str("    match *_i {\n");
                 state.visit_mut_impl.push_str("    match *_i {\n");
                 state.fold_impl.push_str("    match _i {\n");
@@ -739,7 +734,7 @@
                     let fields: Vec<(&Field, Tokens)> = match variant.item().data {
                         VariantData::Struct(..) => panic!("Doesn't support enum struct variants"),
                         VariantData::Tuple(ref fields, ..) => {
-                            let binding = format!("        {}(", variant.item().ident);
+                            let binding = format!("        {}::{}(", s.ast.ident, variant.item().ident);
                             state.visit_impl.push_str(&binding);
                             state.visit_mut_impl.push_str(&binding);
                             state.fold_impl.push_str(&binding);
@@ -776,12 +771,13 @@
                         VariantData::Unit => {
                             state
                                 .visit_impl
-                                .push_str(&format!("        {} => {{ }}\n", variant.item().ident,));
+                                .push_str(&format!("        {0}::{1} => {{ }}\n", s.ast.ident, variant.item().ident));
                             state
                                 .visit_mut_impl
-                                .push_str(&format!("        {} => {{ }}\n", variant.item().ident,));
+                                .push_str(&format!("        {0}::{1} => {{ }}\n", s.ast.ident, variant.item().ident));
                             state.fold_impl.push_str(&format!(
-                                "        {0} => {{ {0} }}\n",
+                                "        {0}::{1} => {{ {0}::{1} }}\n",
+                                s.ast.ident,
                                 variant.item().ident
                             ));
                             continue;
@@ -795,7 +791,7 @@
                     }
                     state
                         .fold_impl
-                        .push_str(&format!("            {} (\n", variant.item().ident,));
+                        .push_str(&format!("            {}::{} (\n", s.ast.ident, variant.item().ident,));
                     for (field, binding) in fields {
                         state.visit_impl.push_str(&format!(
                             "            {};\n",