1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use super::*;

impl<'a> IntoIterator for &'a ClassDeclaration {
    type Item = ClassTerm;
    type IntoIter = ClassIterator<'a>;

    fn into_iter(self) -> Self::IntoIter {
        ClassIterator { inner: self.body.terms.iter() }
    }
}

impl<'a> Iterator for ClassIterator<'a> {
    type Item = ClassTerm;

    fn next(&mut self) -> Option<Self::Item> {
        let term = self.inner.next()?;
        match &term.r#type {
            StatementBody::ClassField(field) => Some(ClassTerm::Field((**field).clone())),
            StatementBody::ClassMethod(method) => Some(ClassTerm::Method((**method).clone())),
            _ => None,
        }
    }
}