structs - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# structs

Similarly, a `struct` can be destructured as shown:

    fn main() {
        struct Foo {
            x: (u32, u32),
            y: u32,
        }

        // Try changing the values in the struct to see what happens
        let foo = Foo { x: (1, 2), y: 3 };

        match foo {
            Foo { x: (1, b), y } => println!("First of x is 1, b = {},  y = {} ", b, y),

            // you can destructure structs and rename the variables,
            // the order is not important
            Foo { y: 2, x: i } => println!("y is 2, i = {:?}", i),

            // and you can also ignore some variables:
            Foo { y, .. } => println!("y = {}, we don't care about x", y),
            // this will give an error: pattern does not mention field `x`
            //Foo { y } => println!("y = {}", y),
        }

        let faa = Foo { x: (1, 2), y: 3 };

        // You do not need a match block to destructure structs:
        let Foo { x : x0, y: y0 } = faa;
        println!("Outside: x0 = {x0:?}, y0 = {y0}");

        // Destructuring works with nested structs as well:
        struct Bar {
            foo: Foo,
        }

        let bar = Bar { foo: faa };
        let Bar { foo: Foo { x: nested_x, y: nested_y } } = bar;
        println!("Nested: nested_x = {nested_x:?}, nested_y = {nested_y:?}");
    }

### See also:

Structs