Generate a nested Rust module containing message nested types.
(
self,
message: Message,
parent_stack: Optional[List[Message]] = None,
indent: int = 0,
)
| 1271 | return lines |
| 1272 | |
| 1273 | def generate_nested_module( |
| 1274 | self, |
| 1275 | message: Message, |
| 1276 | parent_stack: Optional[List[Message]] = None, |
| 1277 | indent: int = 0, |
| 1278 | ) -> List[str]: |
| 1279 | """Generate a nested Rust module containing message nested types.""" |
| 1280 | if ( |
| 1281 | not message.nested_enums |
| 1282 | and not message.nested_unions |
| 1283 | and not message.nested_messages |
| 1284 | ): |
| 1285 | return [] |
| 1286 | |
| 1287 | lines: List[str] = [] |
| 1288 | ind = self.indent_str * indent |
| 1289 | module_name = self.get_module_identifier(message) |
| 1290 | lines.append(f"{ind}pub mod {module_name} {{") |
| 1291 | lines.append(f"{ind}{self.indent_str}use super::*;") |
| 1292 | lines.append("") |
| 1293 | |
| 1294 | lineage = (parent_stack or []) + [message] |
| 1295 | |
| 1296 | # Nested enums |
| 1297 | for nested_enum in message.nested_enums: |
| 1298 | enum_lines = self.generate_enum(nested_enum, lineage) |
| 1299 | lines.extend(self.indent_lines(enum_lines, indent + 1)) |
| 1300 | lines.append("") |
| 1301 | |
| 1302 | # Nested unions |
| 1303 | for nested_union in message.nested_unions: |
| 1304 | union_lines = self.generate_union(nested_union, lineage) |
| 1305 | lines.extend(self.indent_lines(union_lines, indent + 1)) |
| 1306 | lines.append("") |
| 1307 | |
| 1308 | # Nested messages and their modules |
| 1309 | for nested_msg in message.nested_messages: |
| 1310 | nested_module_lines = self.generate_nested_module( |
| 1311 | nested_msg, lineage, indent + 1 |
| 1312 | ) |
| 1313 | if nested_module_lines: |
| 1314 | lines.extend(nested_module_lines) |
| 1315 | lines.append("") |
| 1316 | |
| 1317 | msg_lines = self.generate_message(nested_msg, lineage) |
| 1318 | lines.extend(self.indent_lines(msg_lines, indent + 1)) |
| 1319 | lines.append("") |
| 1320 | |
| 1321 | if lines[-1] == "": |
| 1322 | lines.pop() |
| 1323 | lines.append(f"{ind}}}") |
| 1324 | return lines |
| 1325 | |
| 1326 | def generate_field( |
| 1327 | self, |
no test coverage detected