Round trip testing
diff --git a/src/macro_input.rs b/src/macro_input.rs
index 848e609..c2b5900 100644
--- a/src/macro_input.rs
+++ b/src/macro_input.rs
@@ -18,14 +18,14 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
-    use attr::parsing::attribute;
+    use attr::parsing::outer_attr;
     use data::parsing::{visibility, struct_body, enum_body};
     use generics::parsing::generics;
     use ident::parsing::ident;
     use nom::multispace;
 
     named!(pub macro_input -> MacroInput, do_parse!(
-        attrs: many0!(attribute) >>
+        attrs: many0!(outer_attr) >>
         vis: visibility >>
         which: alt!(keyword!("struct") | keyword!("enum")) >>
         id: ident >>
@@ -55,12 +55,13 @@
 #[cfg(feature = "printing")]
 mod printing {
     use super::*;
+    use attr::FilterAttrs;
     use data::{Visibility, VariantData};
     use quote::{Tokens, ToTokens};
 
     impl ToTokens for MacroInput {
         fn to_tokens(&self, tokens: &mut Tokens) {
-            for attr in &self.attrs {
+            for attr in self.attrs.outer() {
                 attr.to_tokens(tokens);
             }
             if let Visibility::Public = self.vis {