MCPcopy Create free account
hub / github.com/apache/fory / generate_nested_module

Method generate_nested_module

compiler/fory_compiler/generators/rust.py:1273–1324  ·  view source on GitHub ↗

Generate a nested Rust module containing message nested types.

(
        self,
        message: Message,
        parent_stack: Optional[List[Message]] = None,
        indent: int = 0,
    )

Source from the content-addressed store, hash-verified

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,

Callers 1

generate_moduleMethod · 0.95

Calls 8

get_module_identifierMethod · 0.95
generate_enumMethod · 0.95
indent_linesMethod · 0.95
generate_unionMethod · 0.95
generate_messageMethod · 0.95
extendMethod · 0.80
appendMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected