Generate a Python dataclass with nested types.
(
self,
message: Message,
indent: int = 0,
parent_stack: Optional[List[Message]] = None,
)
| 352 | return lines |
| 353 | |
| 354 | def generate_message( |
| 355 | self, |
| 356 | message: Message, |
| 357 | indent: int = 0, |
| 358 | parent_stack: Optional[List[Message]] = None, |
| 359 | ) -> List[str]: |
| 360 | """Generate a Python dataclass with nested types.""" |
| 361 | lines = [] |
| 362 | ind = " " * indent |
| 363 | lineage = (parent_stack or []) + [message] |
| 364 | |
| 365 | comment = self.format_type_id_comment(message, f"{ind}#") |
| 366 | if comment: |
| 367 | lines.append(comment) |
| 368 | needs_repr = self.message_needs_safe_repr(message) |
| 369 | decorator_args: List[str] = [] |
| 370 | if not self.get_effective_evolving(message): |
| 371 | decorator_args.append("evolving=False") |
| 372 | if needs_repr: |
| 373 | decorator_args.append("repr=False") |
| 374 | if decorator_args: |
| 375 | lines.append(f"{ind}@pyfory.dataclass({', '.join(decorator_args)})") |
| 376 | else: |
| 377 | lines.append(f"{ind}@pyfory.dataclass") |
| 378 | lines.append(f"{ind}class {message.name}:") |
| 379 | |
| 380 | # Generate nested enums first (they need to be defined before fields reference them) |
| 381 | for nested_enum in message.nested_enums: |
| 382 | for line in self.generate_enum(nested_enum, indent=indent + 1): |
| 383 | lines.append(line) |
| 384 | lines.append("") |
| 385 | |
| 386 | # Generate nested unions |
| 387 | for nested_union in message.nested_unions: |
| 388 | for line in self.generate_union( |
| 389 | nested_union, indent=indent + 1, parent_stack=lineage |
| 390 | ): |
| 391 | lines.append(line) |
| 392 | lines.append("") |
| 393 | |
| 394 | # Generate nested messages |
| 395 | for nested_msg in message.nested_messages: |
| 396 | for line in self.generate_message( |
| 397 | nested_msg, |
| 398 | indent=indent + 1, |
| 399 | parent_stack=lineage, |
| 400 | ): |
| 401 | lines.append(line) |
| 402 | lines.append("") |
| 403 | |
| 404 | # Generate fields |
| 405 | for field in message.fields: |
| 406 | field_lines = self.generate_field(field, lineage) |
| 407 | for line in field_lines: |
| 408 | lines.append(f"{ind} {line}") |
| 409 | |
| 410 | if ( |
| 411 | message.fields |
no test coverage detected