Structs
Like tuples, Struct can also be destructured by matching:
struct Foo { x: (u32, u32), y: u32, } #[rustfmt::skip] fn main() { let foo = Foo { x: (1, 2), y: 3 }; match foo { Foo { y: 2, x: i } => println!("y = 2, x = {i:?}"), Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"), Foo { y, .. } => println!("y = {y}, other fields were ignored"), } }
This slide should take about 4 minutes. 
                    - Change the literal values in footo match with the other patterns.
- Add a new field to Fooand make changes to the pattern as needed.
More to Explore
- Try match &fooand check the type of captures. The pattern syntax remains the same, but the captures become shared references. This is match ergonomics and is often useful withmatch selfwhen implementing methods on an enum.- The same effect occurs with match &mut foo: the captures become exclusive references.
 
- The same effect occurs with 
- The distinction between a capture and a constant expression can be hard to
spot. Try changing the 2in the second arm to a variable, and see that it subtly doesn’t work. Change it to aconstand see it working again.