Generate a struct field.
(
self,
field: Field,
parent_stack: Optional[List[Message]] = None,
)
| 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.""" |
no test coverage detected