// Patterns können beliebig tief verschachtelt werden: // Structs in Enums in Options – alles in einem match. enum Inhalt { Text(String), Zahl(i32), } struct Paket { absender: String, inhalt: Option, } fn oeffne(p: &Paket) { match p { // Option UND Enum gleichzeitig destrukturieren Paket { absender, inhalt: Some(Inhalt::Text(t)), } => { println!("Von {absender}: Text \"{t}\""); } Paket { absender, inhalt: Some(Inhalt::Zahl(n)), } => { println!("Von {absender}: Zahl {n}"); } // .. deckt restliche Felder ab (hier: absender) Paket { inhalt: None, .. } => { println!("Leeres Paket."); } } } fn main() { let pakete = vec![ Paket { absender: "Alice".into(), inhalt: Some(Inhalt::Text("Hallo".into())), }, Paket { absender: "Bob".into(), inhalt: Some(Inhalt::Zahl(99)), }, Paket { absender: "Eve".into(), inhalt: None, }, ]; for p in &pakete { oeffne(p); } }