21.17 Example of Nested Pattern Matching
Rust’s pattern matching can go multiple layers deep:
enum Connection { Tcp { ip: (u8, u8, u8, u8), port: u16 }, Udp { ip: (u8, u8, u8, u8), port: u16 }, Unix { path: String }, } fn main() { let conn = Connection::Tcp { ip: (127, 0, 0, 1), port: 8080 }; match conn { Connection::Tcp { ip: (127, 0, 0, 1), port } => { println!("Localhost with port {}", port); } Connection::Tcp { ip, port } => { println!("TCP {}.{}.{}.{}:{}", ip.0, ip.1, ip.2, ip.3, port); } Connection::Udp { ip, port } => { println!("UDP {}.{}.{}.{}:{}", ip.0, ip.1, ip.2, ip.3, port); } Connection::Unix { path } => { println!("Unix socket at {}", path); } } }
This example shows nested destructuring for the tuple (127, 0, 0, 1)
inside the Tcp
variant.