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

Method generate_message

compiler/fory_compiler/generators/rust.py:875–923  ·  view source on GitHub ↗

Generate a Rust struct.

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

Source from the content-addressed store, hash-verified

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."""

Callers 2

generate_moduleMethod · 0.95

Calls 10

get_type_identifierMethod · 0.95
generate_fieldMethod · 0.95
generate_debug_implMethod · 0.95
generate_bytes_implMethod · 0.95
extendMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected