witx_codegen/assemblyscript/
struct.rs1use std::io::Write;
2
3use super::*;
4
5impl AssemblyScriptGenerator {
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("// @ts-ignore: decorator")?
12 .write_line("@unmanaged")?
13 .write_line(format!("export class {} {{", 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 "{}: {};",
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!("private __pad8_{}: u8;", i))?;
27 }
28 for i in 0..(pad_len & 3) / 2 {
29 w.write_line(format!("private __pad16_{}: u16;", i))?;
30 }
31 for i in 0..(pad_len & 7) / 4 {
32 w.write_line(format!("private __pad32_{}: u32;", i))?;
33 }
34 for i in 0..pad_len / 8 {
35 w.write_line(format!("private __pad64_{}: u64;", i))?;
36 }
37 }
38 }
39 w.write_line("}")?.eob()?;
40 Ok(())
41 }
42}