Struct ExprMatch

docs.rs

pub struct ExprMatch {
    pub attrs: Vec<Attribute>,
    pub match_token: Match,
    pub expr: Box<Expr>,
    pub brace_token: Brace,
    pub arms: Vec<Arm>,
}

pub struct Arm {
    pub attrs: Vec<Attribute>,
    pub pat: Pat,
    pub guard: Option<(If, Box<Expr>)>,
    pub fat_arrow_token: FatArrow,
    pub body: Box<Expr>,
    pub comma: Option<Comma>,
}

Iterator<Item = &Expr>

node: &ExprMatch

[node.expr.as_ref()]
    .into_iter()
    .chain(
        node.arms
            .iter()
            .flat_map(|arm| {
                arm.guard
                    .as_slice()
                    .iter()
                    .map(|(_, expr)| expr.as_ref())
                    .chain([arm.body.as_ref()])
            }),
    )

diagram

Iterator<Item = &mut Expr>

node: &mut ExprMatch

[node.expr.as_mut()]
    .into_iter()
    .chain(
        node.arms
            .iter_mut()
            .flat_map(|arm| {
                arm.guard
                    .as_mut_slice()
                    .iter_mut()
                    .map(|(_, expr)| expr.as_mut())
                    .chain([arm.body.as_mut()])
            }),
    )

diagram