Typedef parsing
diff --git a/src/generics.rs b/src/generics.rs
index c0d5c94..40025c4 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -89,8 +89,8 @@
     use ident::parsing::ident;
     use ty::parsing::{ty, poly_trait_ref};
 
-    named!(pub generics -> Generics, do_parse!(
-        bracketed: alt!(
+    named!(pub generics -> Generics, map!(
+        alt!(
             do_parse!(
                 punct!("<") >>
                 lifetimes: separated_list!(punct!(","), lifetime_def) >>
@@ -103,13 +103,12 @@
             )
             |
             epsilon!() => { |_| (Vec::new(), Vec::new()) }
-        ) >>
-        where_clause: where_clause >>
-        (Generics {
-            lifetimes: bracketed.0,
-            ty_params: bracketed.1,
-            where_clause: where_clause,
-        })
+        ),
+        |(lifetimes, ty_params)| Generics {
+            lifetimes: lifetimes,
+            ty_params: ty_params,
+            where_clause: Default::default(),
+        }
     ));
 
     named!(pub lifetime -> Lifetime, preceded!(
diff --git a/src/item.rs b/src/item.rs
index 011a6ff..4d646fe 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -212,6 +212,7 @@
     use attr::parsing::outer_attr;
     use data::parsing::visibility;
     use expr::parsing::expr;
+    use generics::parsing::generics;
     use ident::parsing::ident;
     use macro_input::{Body, MacroInput};
     use macro_input::parsing::macro_input;
@@ -227,7 +228,8 @@
         // TODO: Fn
         // TODO: Mod
         // TODO: ForeignMod
-        // TODO: Ty
+        |
+        item_ty
         |
         item_struct_or_enum
         // TODO: Union
@@ -299,6 +301,23 @@
         })
     ));
 
+    named!(item_ty -> Item, do_parse!(
+        attrs: many0!(outer_attr) >>
+        vis: visibility >>
+        keyword!("type") >>
+        id: ident >>
+        generics: generics >>
+        punct!("=") >>
+        ty: ty >>
+        punct!(";") >>
+        (Item {
+            ident: id,
+            vis: vis,
+            attrs: attrs,
+            node: ItemKind::Ty(Box::new(ty), generics),
+        })
+    ));
+
     named!(item_struct_or_enum -> Item, map!(
         macro_input,
         |def: MacroInput| Item {
@@ -365,7 +384,15 @@
                 ItemKind::Fn(ref _decl, _unsafety, _constness, ref _abi, ref _generics, ref _block) => unimplemented!(),
                 ItemKind::Mod(ref _items) => unimplemented!(),
                 ItemKind::ForeignMod(ref _foreign_mod) => unimplemented!(),
-                ItemKind::Ty(ref _ty, ref _generics) => unimplemented!(),
+                ItemKind::Ty(ref ty, ref generics) => {
+                    self.vis.to_tokens(tokens);
+                    tokens.append("type");
+                    self.ident.to_tokens(tokens);
+                    generics.to_tokens(tokens);
+                    tokens.append("=");
+                    ty.to_tokens(tokens);
+                    tokens.append(";");
+                }
                 ItemKind::Enum(ref variants, ref generics) => {
                     self.vis.to_tokens(tokens);
                     tokens.append("enum");
diff --git a/src/macro_input.rs b/src/macro_input.rs
index 149b6d7..92a8e79 100644
--- a/src/macro_input.rs
+++ b/src/macro_input.rs
@@ -18,9 +18,10 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
+    use Generics;
     use attr::parsing::outer_attr;
     use data::parsing::{visibility, struct_body, enum_body};
-    use generics::parsing::generics;
+    use generics::parsing::{generics, where_clause};
     use space::whitespace;
     use ident::parsing::ident;
 
@@ -30,12 +31,16 @@
         which: alt!(keyword!("struct") | keyword!("enum")) >>
         id: ident >>
         generics: generics >>
+        where_clause: where_clause >>
         item: switch!(value!(which),
             "struct" => map!(struct_body, move |body| MacroInput {
                 ident: id,
                 vis: vis,
                 attrs: attrs,
-                generics: generics,
+                generics: Generics {
+                    where_clause: where_clause,
+                    .. generics
+                },
                 body: Body::Struct(body),
             })
             |
@@ -43,7 +48,10 @@
                 ident: id,
                 vis: vis,
                 attrs: attrs,
-                generics: generics,
+                generics: Generics {
+                    where_clause: where_clause,
+                    .. generics
+                },
                 body: Body::Enum(body),
             })
         ) >>