temply-derive 0.3.0

Procedural macro for temply
Documentation
use crate::parser::ast;

pub fn inner_asts_mut<'a, 's>(
    item: &'a mut ast::Item<'s>,
) -> impl Iterator<Item = &'a mut ast::Ast<'s>> + 'a {
    let mut asts = Vec::new();

    match item {
        ast::Item::Text(_) => (),
        ast::Item::Comment(_) => (),
        ast::Item::Expr(_, _) => (),
        ast::Item::Let(_) => (),
        ast::Item::Scope(body) => {
            asts.push(body);
        }
        ast::Item::For {
            for_: _,
            pre: _,
            body,
            else_,
        } => {
            asts.push(body);
            if let Some(else_) = else_ {
                asts.push(else_);
            }
        }
        ast::Item::If {
            if_,
            else_ifs,
            else_,
        } => {
            asts.push(&mut if_.1);
            for else_if in else_ifs {
                asts.push(&mut else_if.1);
            }
            if let Some(else_) = else_ {
                asts.push(else_);
            }
        }
        ast::Item::Match { match_: _, wheres } => {
            for where_ in wheres {
                asts.push(&mut where_.1);
            }
        }
        ast::Item::Macro {
            name: _,
            params: _,
            body,
        } => {
            asts.push(body);
        }
        ast::Item::Call {
            name: _,
            args: _,
            ind: _,
        } => (),
    }

    asts.into_iter()
}