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