ConstExpr type for discriminant and array len
diff --git a/src/data.rs b/src/data.rs
index 1565794..71d6754 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -6,7 +6,7 @@
     pub attrs: Vec<Attribute>,
     pub data: VariantData,
     /// Explicit discriminant, e.g. `Foo = 1`
-    pub discriminant: Option<Discriminant>,
+    pub discriminant: Option<ConstExpr>,
 }
 
 #[derive(Debug, Clone, Eq, PartialEq)]
@@ -48,18 +48,12 @@
     Inherited,
 }
 
-#[derive(Debug, Copy, Clone, Eq, PartialEq)]
-pub struct Discriminant {
-    pub value: u64,
-    pub ty: IntTy,
-}
-
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
     use attr::parsing::outer_attr;
+    use constant::parsing::const_expr;
     use ident::parsing::ident;
-    use lit::parsing::int;
     use ty::parsing::ty;
 
     named!(pub struct_body -> VariantData, alt!(
@@ -88,7 +82,7 @@
             |
             epsilon!() => { |_| VariantData::Unit }
         ) >>
-        disr: option!(preceded!(punct!("="), discriminant)) >>
+        disr: option!(preceded!(punct!("="), const_expr)) >>
         (Variant {
             ident: id,
             attrs: attrs,
@@ -144,20 +138,11 @@
         |
         epsilon!() => { |_| Visibility::Inherited }
     ));
-
-    named!(discriminant -> Discriminant, map!(
-        int,
-        |(value, ty)| Discriminant {
-            value: value,
-            ty: ty,
-        }
-    ));
 }
 
 #[cfg(feature = "printing")]
 mod printing {
     use super::*;
-    use lit::Lit;
     use quote::{Tokens, ToTokens};
 
     impl ToTokens for Variant {
@@ -213,10 +198,4 @@
             }
         }
     }
-
-    impl ToTokens for Discriminant {
-        fn to_tokens(&self, tokens: &mut Tokens) {
-            Lit::Int(self.value, self.ty).to_tokens(tokens);
-        }
-    }
 }