Sisu
E0128

Wrong number of sub-patterns

Error

Built from the repository at commit a8614dc.

A variant pattern lists one sub-pattern for each field of the variant: Add(a, b) for a variant with two fields.

Why

Sub-patterns match fields by position, so a missing or extra one leaves it unclear which field each name binds. Use _ for a field you do not need.

Broken

enum Expr {
    Num(i64)
    Add(i64, i64)
}

fn eval(e: Expr) -> i64 {
    match e {
        Num(n) => n
        Add(a) => a
    }
}

fn main() {
    print(eval(Expr.Num(1)))
    print(eval(Expr.Add(2, 3)))
}

What sisu says

error[E0128]: `Add` has 2 fields, the pattern has 1
 --> E0128.sisu:9:9
  |
9 |         Add(a) => a
  |         ^^^^^^

sisu: 1 error
sisu: for more on a code, run `sisu explain <code>`: E0128

Fixed

enum Expr {
    Num(i64)
    Add(i64, i64)
}

fn eval(e: Expr) -> i64 {
    match e {
        Num(n) => n
        Add(a, _) => a
    }
}

fn main() {
    print(eval(Expr.Num(1)))
    print(eval(Expr.Add(2, 3)))
}