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

Method generate_message

compiler/fory_compiler/generators/dart.py:980–1034  ·  view source on GitHub ↗
(
        self,
        message: Message,
        indent: int,
        parent_stack: Optional[List[Message]] = None,
    )

Source from the content-addressed store, hash-verified

978 return lines
979
980 def generate_message(
981 self,
982 message: Message,
983 indent: int,
984 parent_stack: Optional[List[Message]] = None,
985 ) -> List[str]:
986 parent_stack = parent_stack or []
987 current_stack = parent_stack + [message]
988 lines: List[str] = []
989 for enum in message.nested_enums:
990 lines.extend(self.generate_enum(enum, indent))
991 lines.append("")
992 for union in message.nested_unions:
993 lines.extend(self.generate_union(union, indent, current_stack))
994 lines.append("")
995 for nested in message.nested_messages:
996 lines.extend(self.generate_message(nested, indent, current_stack))
997 lines.append("")
998
999 name = self.local_name(message)
1000 full = self.ref_name(message)
1001 lines.extend(
1002 [
1003 f"{self.indent_str * indent}{self.struct_annotation(message)}",
1004 f"{self.indent_str * indent}final class {name} {{",
1005 f"{self.indent_str * (indent + 1)}{name}();",
1006 "",
1007 ]
1008 )
1009 for field in message.fields:
1010 for annotation in self.field_annotations(field, current_stack):
1011 lines.append(f"{self.indent_str * (indent + 1)}{annotation}")
1012 lines.append(
1013 f"{self.indent_str * (indent + 1)}{self.dart_type(field.field_type, field.optional, current_stack)} {self.safe_identifier(self.to_camel_case(field.name))} = {self.default_value(field, current_stack)};"
1014 )
1015 lines.extend(
1016 [
1017 "",
1018 f"{self.indent_str * (indent + 1)}Uint8List toBytes() => {self.module_type_name()}.getFory().serialize(this);",
1019 f"{self.indent_str * (indent + 1)}static {full} fromBytes(Uint8List bytes) => {self.module_type_name()}.getFory().deserialize<{full}>(bytes);",
1020 "",
1021 f"{self.indent_str * (indent + 1)}@override",
1022 f"{self.indent_str * (indent + 1)}bool operator ==(Object other) => identical(this, other) || (other is {name}"
1023 + "".join(
1024 f" && other.{self.safe_identifier(self.to_camel_case(f.name))} == {self.safe_identifier(self.to_camel_case(f.name))}"
1025 for f in message.fields
1026 )
1027 + ");",
1028 "",
1029 f"{self.indent_str * (indent + 1)}@override",
1030 f"{self.indent_str * (indent + 1)}int get hashCode => Object.hashAll([{', '.join(self.safe_identifier(self.to_camel_case(f.name)) for f in message.fields)}]);",
1031 f"{self.indent_str * indent}}}",
1032 ]
1033 )
1034 return lines
1035
1036 def _field_info_lines(
1037 self,

Callers 1

generate_fileMethod · 0.95

Calls 13

generate_enumMethod · 0.95
generate_unionMethod · 0.95
local_nameMethod · 0.95
ref_nameMethod · 0.95
struct_annotationMethod · 0.95
field_annotationsMethod · 0.95
dart_typeMethod · 0.95
safe_identifierMethod · 0.95
default_valueMethod · 0.95
module_type_nameMethod · 0.95
extendMethod · 0.80
to_camel_caseMethod · 0.80

Tested by

no test coverage detected