witx_codegen/rust/
struct.rs1use std::io::Write;
2
3use super::*;
4
5impl RustGenerator {
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("#[repr(C, packed)]")?
12 .write_line("#[derive(Copy,Clone)]")?
13 .write_line(format!("pub struct {} {{", name.as_type()))?;
14 {
15 let mut w = w.new_block();
16 for member in members {
17 let member_type = member.type_.as_ref();
18 w.write_line(format!(
19 "pub {}: {},",
20 member.name.as_var(),
21 member_type.as_lang()
22 ))?;
23
24 let pad_len = member.padding;
25 for i in 0..(pad_len & 1) {
26 w.write_line(format!("__pad8_{}: u8,", i))?;
27 }
28 for i in 0..(pad_len & 3) / 2 {
29 w.write_line(format!("__pad16_{}: u16,", i))?;
30 }
31 for i in 0..(pad_len & 7) / 4 {
32 w.write_line(format!("__pad32_{}: u32,", i))?;
33 }
34 for i in 0..pad_len / 8 {
35 w.write_line(format!("__pad64_{}: u64,", i))?;
36 }
37 }
38 }
39 w.write_line("}")?.eob()?;
40 Ok(())
41 }
42}