1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use wast::parser::{Parse, Parser, Result};

use crate::Module;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Document<'a> {
    pub module: Module<'a>,
}

impl<'a> Parse<'a> for Document<'a> {
    fn parse(parser: Parser<'a>) -> Result<Self> {
        let module = parser.parens(|p| p.parse::<Module>())?;

        Ok(Self { module })
    }
}

#[cfg(test)]
mod tests {
    use crate::*;

    #[test]
    fn empty_module() {
        assert_eq!(
            wast::parser::parse::<Document>(
                &wast::parser::ParseBuffer::new("(module)").unwrap()
            )
            .unwrap(),
            Document {
                module: Module { sections: vec![] },
            },
        )
    }
}