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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use super::start::Start;
use super::{Fmt, Formatter};
use wast::{Module, ModuleField, ModuleKind};

impl<'src> Fmt for Module<'src> {
    fn fmt(&self, formatter: &mut Formatter) {
        formatter.write_line("(module");
        formatter.indent();
        formatter.fmt(&self.kind);
        formatter.deindent();
        formatter.write_line(")");
    }
}

impl<'src> Fmt for &ModuleKind<'src> {
    fn fmt(&self, formatter: &mut Formatter) {
        match self {
            ModuleKind::Text(fields) => {
                formatter.fmt(fields);
            }
            ModuleKind::Binary(..) => unimplemented!(),
        }
    }
}

impl<'src> Fmt for &Vec<ModuleField<'src>> {
    fn fmt(&self, formatter: &mut Formatter) {
        for field in self.iter() {
            formatter.fmt(field);
        }
    }
}

impl<'src> Fmt for &ModuleField<'src> {
    fn fmt(&self, formatter: &mut Formatter) {
        match self {
            ModuleField::Type(ty) => formatter.fmt(ty),
            ModuleField::Func(func) => formatter.fmt(func),
            ModuleField::Global(global) => formatter.fmt(global),
            ModuleField::Memory(mem) => formatter.fmt(mem),
            ModuleField::Data(data) => formatter.fmt(data),
            ModuleField::Table(table) => formatter.fmt(table),
            ModuleField::Elem(element) => formatter.fmt(element),
            ModuleField::Export(export) => formatter.fmt(export),
            ModuleField::Import(import) => formatter.fmt(import),
            ModuleField::Start(index) => formatter.fmt(&Start::new(*index.unwrap_index())),
            ModuleField::Custom(..) => todo!(),
            ModuleField::Event(..) => unimplemented!(),
            ModuleField::Instance(..) => unimplemented!(),
            ModuleField::NestedModule(..) => unimplemented!(),
            ModuleField::Alias(..) => unimplemented!(),
        };
    }
}