Generate a Rust struct.
(
self,
message: Message,
parent_stack: Optional[List[Message]] = None,
)
| 873 | return rendered_type |
| 874 | |
| 875 | def generate_message( |
| 876 | self, |
| 877 | message: Message, |
| 878 | parent_stack: Optional[List[Message]] = None, |
| 879 | ) -> List[str]: |
| 880 | """Generate a Rust struct.""" |
| 881 | lines = [] |
| 882 | |
| 883 | type_name = self.get_type_identifier(message) |
| 884 | |
| 885 | # Derive macros |
| 886 | comment = self.format_type_id_comment(message, "//") |
| 887 | if comment: |
| 888 | lines.append(comment) |
| 889 | needs_safe_debug = self.message_needs_safe_debug(message) |
| 890 | derives = ["::fory::ForyStruct"] |
| 891 | if not needs_safe_debug: |
| 892 | derives.append("Debug") |
| 893 | if self.message_supports_trait(message, "Clone"): |
| 894 | derives.append("Clone") |
| 895 | if self.message_supports_trait(message, "PartialEq"): |
| 896 | derives.append("PartialEq") |
| 897 | if self.message_supports_trait(message, "Eq"): |
| 898 | derives.append("Eq") |
| 899 | if self.message_supports_trait(message, "Hash"): |
| 900 | derives.append("Hash") |
| 901 | if self.message_supports_trait(message, "Default"): |
| 902 | derives.append("Default") |
| 903 | lines.append(f"#[derive({', '.join(derives)})]") |
| 904 | if not self.get_effective_evolving(message): |
| 905 | lines.append("#[fory(evolving = false)]") |
| 906 | |
| 907 | lines.append(f"pub struct {type_name} {{") |
| 908 | |
| 909 | # Fields |
| 910 | lineage = (parent_stack or []) + [message] |
| 911 | for field in message.fields: |
| 912 | field_lines = self.generate_field(field, lineage) |
| 913 | for line in field_lines: |
| 914 | lines.append(f" {line}") |
| 915 | |
| 916 | lines.append("}") |
| 917 | lines.append("") |
| 918 | if needs_safe_debug: |
| 919 | lines.extend(self.generate_debug_impl(message)) |
| 920 | lines.append("") |
| 921 | lines.extend(self.generate_bytes_impl(type_name)) |
| 922 | |
| 923 | return lines |
| 924 | |
| 925 | def message_has_any(self, message: Message) -> bool: |
| 926 | """Return True if a message contains any type fields.""" |
no test coverage detected