(
self,
union: Union,
indent: int,
parent_stack: Optional[List[Message]] = None,
)
| 826 | return lines |
| 827 | |
| 828 | def generate_union( |
| 829 | self, |
| 830 | union: Union, |
| 831 | indent: int, |
| 832 | parent_stack: Optional[List[Message]] = None, |
| 833 | ) -> List[str]: |
| 834 | parent_stack = parent_stack or [] |
| 835 | name = self.local_name(union) |
| 836 | full = self.ref_name(union) |
| 837 | case_name = f"{name}Case" |
| 838 | lines = [f"{self.indent_str * indent}enum {case_name} {{"] |
| 839 | for i, field in enumerate(union.fields): |
| 840 | suffix = "," if i < len(union.fields) - 1 else ";" |
| 841 | lines.append( |
| 842 | f"{self.indent_str * (indent + 1)}{self.safe_identifier(self.to_camel_case(field.name))}{suffix}" |
| 843 | ) |
| 844 | lines.extend( |
| 845 | [ |
| 846 | "", |
| 847 | f"{self.indent_str * (indent + 1)}int get id => switch (this) {{", |
| 848 | ] |
| 849 | ) |
| 850 | for field in union.fields: |
| 851 | case = self.safe_identifier(self.to_camel_case(field.name)) |
| 852 | lines.append( |
| 853 | f"{self.indent_str * (indent + 2)}{case_name}.{case} => {field.number}," |
| 854 | ) |
| 855 | lines.extend( |
| 856 | [ |
| 857 | f"{self.indent_str * (indent + 1)}}};", |
| 858 | f"{self.indent_str * indent}}}", |
| 859 | "", |
| 860 | f"{self.indent_str * indent}@ForyUnion()", |
| 861 | f"{self.indent_str * indent}final class {name} {{", |
| 862 | f"{self.indent_str * (indent + 1)}final {case_name} _case;", |
| 863 | f"{self.indent_str * (indent + 1)}final Object? _value;", |
| 864 | "", |
| 865 | f"{self.indent_str * (indent + 1)}const {name}._(this._case, this._value);", |
| 866 | "", |
| 867 | ] |
| 868 | ) |
| 869 | for field in union.fields: |
| 870 | case = self.safe_identifier(self.to_camel_case(field.name)) |
| 871 | lines.append( |
| 872 | f"{self.indent_str * (indent + 1)}factory {name}.{case}({self.dart_type(field.field_type, parent_stack=parent_stack)} value) => {name}._({case_name}.{case}, value);" |
| 873 | ) |
| 874 | lines.extend( |
| 875 | [ |
| 876 | "", |
| 877 | f"{self.indent_str * (indent + 1)}{case_name} get caseValue => _case;", |
| 878 | f"{self.indent_str * (indent + 1)}int get caseId => _case.id;", |
| 879 | f"{self.indent_str * (indent + 1)}Object? get value => _value;", |
| 880 | "", |
| 881 | ] |
| 882 | ) |
| 883 | for field in union.fields: |
| 884 | case = self.safe_identifier(self.to_camel_case(field.name)) |
| 885 | t = self.dart_type(field.field_type, parent_stack=parent_stack) |
no test coverage detected