witx_codegen/zig/
struct.rs1use 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}