Pattern Matching
Two pattern shapes coexist in the AST:
Pattern for match arms (enum-variant matching) and
BindingPattern for destructuring let bindings.
MatchArm
#![allow(unused)] fn main() { pub struct MatchArm { pub pattern: Pattern, pub body: Expr, pub span: Span, } }
Pattern
#![allow(unused)] fn main() { pub enum Pattern { Variant { name: Ident, bindings: Vec<Ident>, }, Wildcard, // _ } }
BindingPattern
For destructuring in let bindings (file-level and inside blocks).
#![allow(unused)] fn main() { pub enum BindingPattern { Simple(Ident), Array { elements: Vec<ArrayPatternElement>, span: Span, }, Struct { fields: Vec<StructPatternField>, span: Span, }, Tuple { elements: Vec<BindingPattern>, span: Span, }, } }
ArrayPatternElement
#![allow(unused)] fn main() { pub enum ArrayPatternElement { Binding(BindingPattern), Rest(Option<Ident>), // ...rest or just ... Wildcard, // _ } }
StructPatternField
#![allow(unused)] fn main() { pub struct StructPatternField { pub name: Ident, pub alias: Option<Ident>, // field: alias pub span: Span, } }