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

Method generate_union

compiler/fory_compiler/generators/swift.py:958–998  ·  view source on GitHub ↗
(
        self,
        union: Union,
        indent: int = 0,
        parent_stack: Optional[List[Message]] = None,
    )

Source from the content-addressed store, hash-verified

956 return lines
957
958 def generate_union(
959 self,
960 union: Union,
961 indent: int = 0,
962 parent_stack: Optional[List[Message]] = None,
963 ) -> List[str]:
964 lines: List[str] = []
965 ind = self.indent_str * indent
966 type_name = self._declared_type_name(union.name, parent_stack)
967 comment = self.format_type_id_comment(union, f"{ind}//")
968 if comment:
969 lines.append(comment)
970 lines.append(f"{ind}@ForyUnion")
971 conformances = (
972 ": Equatable"
973 if self.union_supports_equatable(union, parent_stack=parent_stack)
974 else ""
975 )
976 lines.append(f"{ind}public enum {type_name}{conformances} {{")
977 lineage = parent_stack or []
978 lines.append(f"{ind}{self.indent_str}@ForyUnknownCase")
979 lines.append(f"{ind}{self.indent_str}case unknown(UnknownCase)")
980 lines.append("")
981 for field in union.fields:
982 field_type = self.generate_type(
983 field.field_type,
984 nullable=False,
985 parent_stack=lineage,
986 )
987 case_name = self.safe_enum_case_name(field.name)
988 attr_parts = [f"id: {self.union_case_id_argument(field)}"]
989 payload_hint = self.type_hint_expression(field.field_type)
990 if payload_hint is not None:
991 attr_parts.append(f"payload: {payload_hint}")
992 attr = f"@ForyCase({', '.join(attr_parts)})"
993 lines.append(f"{ind}{self.indent_str}{attr}")
994 lines.append(f"{ind}{self.indent_str}case {case_name}({field_type})")
995 lines.append("")
996 lines.extend(self.generate_bytes_methods(type_name, indent + 1))
997 lines.append(f"{ind}}}")
998 return lines
999
1000 def generate_message(
1001 self,

Callers 2

generate_fileMethod · 0.95
generate_messageMethod · 0.95

Calls 10

_declared_type_nameMethod · 0.95
generate_typeMethod · 0.95
safe_enum_case_nameMethod · 0.95
type_hint_expressionMethod · 0.95
extendMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected