21.4 Simple let Bindings as Patterns

Even the most basic variable declaration uses an irrefutable pattern:

fn main() {
    let x = 5; // `x` is an irrefutable pattern binding the value 5.
    let point = (10, 20);
    let (px, py) = point; // `(px, py)` is an irrefutable tuple pattern destructuring `point`.

    println!("x = {}", x);
    println!("Point coordinates: ({}, {})", px, py);

    struct Dimensions { width: u32, height: u32 }
    let dims = Dimensions { width: 800, height: 600 };
    let Dimensions { width, height } = dims; // Irrefutable struct pattern (with punning)
    println!("Dimensions: {}x{}", width, height);
}

These let statements work because the patterns (x, (px, py), Dimensions { width, height }) will always successfully match the type of the value on the right-hand side.