Printing for attributes and types
diff --git a/src/attr.rs b/src/attr.rs
index 7b09b47..828006f 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -83,3 +83,41 @@
         map!(word, MetaItem::Word)
     ));
 }
+
+#[cfg(feature = "printing")]
+mod printing {
+    use super::*;
+    use quote::{Tokens, ToTokens};
+
+    impl ToTokens for Attribute {
+        fn to_tokens(&self, tokens: &mut Tokens) {
+            tokens.append("#[");
+            self.value.to_tokens(tokens);
+            tokens.append("]");
+        }
+    }
+
+    impl ToTokens for MetaItem {
+        fn to_tokens(&self, tokens: &mut Tokens) {
+            match *self {
+                MetaItem::Word(ref ident) => tokens.append(&ident),
+                MetaItem::List(ref ident, ref inner) => {
+                    tokens.append(&ident);
+                    tokens.append("(");
+                    for (i, meta_item) in inner.iter().enumerate() {
+                        if i > 0 {
+                            tokens.append(",");
+                        }
+                        meta_item.to_tokens(tokens);
+                    }
+                    tokens.append(")");
+                }
+                MetaItem::NameValue(ref name, ref value) => {
+                    tokens.append(&name);
+                    tokens.append("=");
+                    value.to_tokens(tokens);
+                }
+            }
+        }
+    }
+}