Preserve the original discriminant Expr
diff --git a/syntax/mod.rs b/syntax/mod.rs
index c109229..e1402a0 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -23,7 +23,7 @@
 use proc_macro2::{Ident, Span};
 use syn::punctuated::Punctuated;
 use syn::token::{Brace, Bracket, Paren};
-use syn::{Lifetime, LitStr, Token, Type as RustType};
+use syn::{Expr, Lifetime, LitStr, Token, Type as RustType};
 
 pub use self::atom::Atom;
 pub use self::derive::Derive;
@@ -109,6 +109,7 @@
 pub struct Variant {
     pub ident: Ident,
     pub discriminant: Discriminant,
+    pub expr: Option<Expr>,
 }
 
 pub enum Type {
diff --git a/syntax/parse.rs b/syntax/parse.rs
index eff14c0..3ca63ab 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -126,9 +126,11 @@
             Ok(discriminant) => discriminant,
             Err(err) => return Err(Error::new_spanned(variant, err)),
         };
+        let expr = variant.discriminant.map(|(_, expr)| expr);
         variants.push(Variant {
             ident: variant.ident,
             discriminant,
+            expr,
         });
     }