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

Method generate_field

compiler/fory_compiler/generators/rust.py:1326–1369  ·  view source on GitHub ↗

Generate a struct field.

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

Source from the content-addressed store, hash-verified

1324 return lines
1325
1326 def generate_field(
1327 self,
1328 field: Field,
1329 parent_stack: Optional[List[Message]] = None,
1330 ) -> List[str]:
1331 """Generate a struct field."""
1332 lines = []
1333
1334 attrs = []
1335 if field.tag_id is not None:
1336 attrs.append(f"id = {field.tag_id}")
1337 is_any = (
1338 isinstance(field.field_type, PrimitiveType)
1339 and field.field_type.kind == PrimitiveKind.ANY
1340 )
1341 if field.optional or is_any:
1342 attrs.append("nullable = true")
1343 if field.ref:
1344 attrs.append("ref = true")
1345 nested_attr = self.get_nested_field_attr(field.field_type)
1346 if nested_attr:
1347 attrs.append(nested_attr)
1348 else:
1349 encoding = self.get_encoding_attr(field.field_type)
1350 if encoding:
1351 attrs.append(encoding)
1352 if attrs:
1353 lines.append(f"#[fory({', '.join(attrs)})]")
1354
1355 pointer_type = self.get_field_pointer_type(field)
1356 rust_type = self.generate_type(
1357 field.field_type,
1358 nullable=field.optional,
1359 ref=field.ref,
1360 element_optional=field.element_optional,
1361 element_ref=field.element_ref,
1362 parent_stack=parent_stack,
1363 pointer_type=pointer_type,
1364 )
1365 field_name = self.get_field_identifier(parent_stack[-1], field)
1366
1367 lines.append(f"pub {field_name}: {rust_type},")
1368
1369 return lines
1370
1371 def get_encoding_attr(self, field_type: FieldType) -> Optional[str]:
1372 """Return an encoding attribute for integer primitives."""

Callers 1

generate_messageMethod · 0.95

Calls 6

get_nested_field_attrMethod · 0.95
get_encoding_attrMethod · 0.95
generate_typeMethod · 0.95
get_field_identifierMethod · 0.95
appendMethod · 0.45

Tested by

no test coverage detected