--- /dev/null
+--- a/src/shared/discriminant_assigner.rs
++++ b/src/shared/discriminant_assigner.rs
+@@ -26,20 +26,20 @@
+ let discriminant_expr = &discriminant.1;\r
+ let variant_name = &variant.ident;\r
+ \r
+- let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr else {\r
++ if let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr {\r
++ let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable);\r
++ if discriminant_value > self.max_value() {\r
++ abort!(variant, "Value of variant exceeds the given number of bits")\r
++ }\r
++\r
++ Some(discriminant_value)\r
++ } else {\r
+ abort!(\r
+ discriminant_expr,\r
+ "variant `{}` is not a number", variant_name;\r
+ help = "only literal integers currently supported"\r
+ )\r
+- };\r
+-\r
+- let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable);\r
+- if discriminant_value > self.max_value() {\r
+- abort!(variant, "Value of variant exceeds the given number of bits")\r
+ }\r
+-\r
+- Some(discriminant_value)\r
+ }\r
+ \r
+ fn assign(&mut self, variant: &Variant) -> u128 {\r
+--- a/src/shared/fallback.rs
++++ b/src/shared/fallback.rs
+@@ -22,8 +22,9 @@
+ }\r
+ Unnamed(fields) => {\r
+ let variant_fields = fields.unnamed.iter();\r
+- let Ok(fallback_value) = variant_fields.exactly_one() else {\r
+- abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant")\r
++ let fallback_value = match variant_fields.exactly_one() {\r
++ Ok(ok) => ok,\r
++ _ => abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant")\r
+ };\r
+ \r
+ if !is_last_variant {\r