witx_codegen/doc/
union.rs

1use std::io::Write;
2
3use super::*;
4
5impl DocGenerator {
6    fn define_union_member<T: Write>(
7        w: &mut PrettyWriter<T>,
8        _union_name: &str,
9        _i: usize,
10        member: &ASUnionMember,
11    ) -> Result<(), Error> {
12        let member_type = member.type_.as_ref();
13        w.write_line(format!(
14            "{}: {}",
15            member.name.as_var(),
16            member_type.as_lang(),
17        ))?;
18        Ok(())
19    }
20
21    pub fn define_as_union<T: Write>(
22        w: &mut PrettyWriter<T>,
23        name: &str,
24        union_: &ASUnion,
25    ) -> Result<(), Error> {
26        let tag_repr = union_.tag_repr.as_ref();
27        w.write_lines(format!(
28            "### {}\nTagged union with tag type: {} and the following possibilities:",
29            name.as_type(),
30            tag_repr.as_lang()
31        ))?
32        .eob()?;
33        {
34            let mut w = w.new_block();
35            for (i, member) in union_.members.iter().enumerate() {
36                Self::define_union_member(&mut w, name, i, member)?;
37            }
38        }
39        Ok(())
40    }
41}