witx_codegen/zig/
struct.rs

1use std::io::Write;
2
3use super::*;
4
5impl ZigGenerator {
6    pub fn define_as_struct<T: Write>(
7        w: &mut PrettyWriter<T>,
8        name: &str,
9        members: &[ASStructMember],
10    ) -> Result<(), Error> {
11        w.write_line(format!("pub const {} = extern struct {{", name.as_type()))?;
12        {
13            let mut w = w.new_block();
14            for member in members {
15                let member_type = member.type_.as_ref();
16                w.write_line(format!(
17                    "{}: {},",
18                    member.name.as_var(),
19                    member_type.as_lang()
20                ))?;
21
22                let pad_len = member.padding;
23                for i in 0..(pad_len & 1) {
24                    w.write_line(format!("__pad8_{}: u8 = undefined,", i))?;
25                }
26                for i in 0..(pad_len & 3) / 2 {
27                    w.write_line(format!("__pad16_{}: u16 = undefined,", i))?;
28                }
29                for i in 0..(pad_len & 7) / 4 {
30                    w.write_line(format!("__pad32_{}: u32 = undefined,", i))?;
31                }
32                for i in 0..pad_len / 8 {
33                    w.write_line(format!("__pad64_{}: u64 = undefined,", i))?;
34                }
35            }
36        }
37        w.write_line("};")?.eob()?;
38        Ok(())
39    }
40}