Skip to content

Commit

Permalink
minor cleanups
Browse files Browse the repository at this point in the history
  • Loading branch information
sjml committed Oct 28, 2024
1 parent 31426bf commit 56f09bb
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 33 deletions.
67 changes: 35 additions & 32 deletions beschi/writers/rust.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,39 +96,40 @@ def gen_measurement(self, st: Struct, accessor: str = "") -> tuple[list[str], in

if st.is_simple():
lines.append(f"{self.protocol.get_size_of(st.name)}")
else:
size_init = "let mut size: u32 = 0;"
lines.append(size_init)

for var in st.members:
if var.is_list:
accum += NUMERIC_TYPE_SIZES[self.protocol.list_size_type]
if var.is_simple(True):
lines.append(f"size += ({accessor}{var.name}.len() as u32) * {self.protocol.get_size_of(var.vartype)};")
elif var.vartype == "string":
lines.append(f"for s in &{accessor}{var.name} {{")
lines.append(f"{self.tab}size += {NUMERIC_TYPE_SIZES[self.protocol.string_size_type]} + (s.len() as u32);")
lines.append("}")
else:
lines.append(f"for el in &{accessor}{var.name} {{")
clines, caccum = self.gen_measurement(self.protocol.structs[var.vartype], f"el.")
if clines[0] == size_init:
clines = clines[1:]
clines.append(f"size += {caccum};")
lines += [f"{self.tab}{l}" for l in clines]
lines.append("}")
return lines, accum

size_init = "let mut size: u32 = 0;"
lines.append(size_init)

for var in st.members:
if var.is_list:
accum += NUMERIC_TYPE_SIZES[self.protocol.list_size_type]
if var.is_simple(True):
lines.append(f"size += ({accessor}{var.name}.len() as u32) * {self.protocol.get_size_of(var.vartype)};")
elif var.vartype == "string":
lines.append(f"for s in &{accessor}{var.name} {{")
lines.append(f"{self.tab}size += {NUMERIC_TYPE_SIZES[self.protocol.string_size_type]} + (s.len() as u32);")
lines.append("}")
else:
if var.is_simple():
accum += self.protocol.get_size_of(var.vartype)
elif var.vartype == "string":
accum += NUMERIC_TYPE_SIZES[self.protocol.string_size_type]
lines.append(f"size += {accessor}{var.name}.len() as u32;")
else:
clines, caccum = self.gen_measurement(self.protocol.structs[var.vartype], f"{accessor}{var.name}.")
if clines[0] == size_init:
clines = clines[1:]
lines += clines
accum += caccum
lines.append(f"for el in &{accessor}{var.name} {{")
clines, caccum = self.gen_measurement(self.protocol.structs[var.vartype], "el.")
if clines[0] == size_init:
clines = clines[1:]
clines.append(f"size += {caccum};")
lines += [f"{self.tab}{l}" for l in clines]
lines.append("}")
else:
if var.is_simple():
accum += self.protocol.get_size_of(var.vartype)
elif var.vartype == "string":
accum += NUMERIC_TYPE_SIZES[self.protocol.string_size_type]
lines.append(f"size += {accessor}{var.name}.len() as u32;")
else:
clines, caccum = self.gen_measurement(self.protocol.structs[var.vartype], f"{accessor}{var.name}.")
if clines[0] == size_init:
clines = clines[1:]
lines += clines
accum += caccum
return lines, accum

def gen_struct(self, sname: str, sdata: Struct):
Expand Down Expand Up @@ -161,6 +162,7 @@ def gen_struct(self, sname: str, sdata: Struct):
self.write_line("size")
self.indent_level -= 1
self.write_line("}")
self.write_line()

self.write_line(f"pub fn from_bytes({'_' if len(sdata.members) == 0 else ''}reader: &mut BufferReader) -> Result<{sname}, {self.prefix}Error> {{")
self.indent_level += 1
Expand All @@ -169,6 +171,7 @@ def gen_struct(self, sname: str, sdata: Struct):
self.write_line(f"Ok({sname} {{{', '.join(varnames)}}})")
self.indent_level -= 1
self.write_line("}")
self.write_line()

if sdata.is_message:
self.write_line("pub fn write_bytes(&self, writer: &mut Vec<u8>, tag: bool) {")
Expand Down
2 changes: 1 addition & 1 deletion beschi/writers/swift.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ def gen_struct(self, sname: str, sdata: Struct):
self.write_line(f"return n{sname}")
self.indent_level -= 1
self.write_line("}")
self.write_line()

if sdata.is_message:
self.write_line("public func WriteBytes(data: inout Data, tag: Bool) -> Void {")
Expand All @@ -193,7 +194,6 @@ def gen_struct(self, sname: str, sdata: Struct):
self.write_line("data = dataWriter.data")
self.indent_level -= 1
self.write_line("}")
self.write_line()

self.indent_level -= 1
self.write_line("}")
Expand Down

0 comments on commit 56f09bb

Please sign in to comment.