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

Method _conversion_expression

compiler/fory_compiler/generators/dart.py:461–527  ·  view source on GitHub ↗
(
        self,
        field_type: FieldType,
        value_expr: str,
        nullable: bool = False,
        parent_stack: Optional[List[Message]] = None,
    )

Source from the content-addressed store, hash-verified

459 return not isinstance(field_type, (ListType, ArrayType, MapType))
460
461 def _conversion_expression(
462 self,
463 field_type: FieldType,
464 value_expr: str,
465 nullable: bool = False,
466 parent_stack: Optional[List[Message]] = None,
467 ) -> str:
468 parent_stack = parent_stack or []
469 if nullable:
470 converted = self._conversion_expression(
471 field_type,
472 value_expr,
473 False,
474 parent_stack,
475 )
476 return f"{value_expr} == null ? null : {converted}"
477 if isinstance(field_type, PrimitiveType):
478 return f"{value_expr} as {self.dart_type(field_type, False, parent_stack)}"
479 if isinstance(field_type, NamedType):
480 return f"{value_expr} as {self.dart_type(field_type, False, parent_stack)}"
481 if isinstance(field_type, ListType):
482 element_type = self.dart_type(
483 field_type.element_type,
484 field_type.element_optional,
485 parent_stack,
486 )
487 list_type = self._typed_array_or_list(field_type, parent_stack)
488 if list_type != f"List<{element_type}>":
489 return f"{value_expr} as {list_type}"
490 if self._supports_direct_container_cast(
491 field_type.element_type,
492 parent_stack,
493 ):
494 return f"List.castFrom<dynamic, {element_type}>({value_expr} as List)"
495 converted_item = self._conversion_expression(
496 field_type.element_type,
497 "item",
498 field_type.element_optional,
499 parent_stack,
500 )
501 return f"List<{element_type}>.of((({value_expr} as List)).map((item) => {converted_item}))"
502 if isinstance(field_type, ArrayType):
503 array_type = self._dense_array_type(field_type)
504 return f"{value_expr} as {array_type}"
505 if isinstance(field_type, MapType):
506 key_type = self.dart_type(field_type.key_type, False, parent_stack)
507 value_type = self.dart_type(field_type.value_type, False, parent_stack)
508 if self._supports_direct_container_cast(
509 field_type.key_type, parent_stack
510 ) and self._supports_direct_container_cast(
511 field_type.value_type, parent_stack
512 ):
513 return f"Map.castFrom<dynamic, dynamic, {key_type}, {value_type}>({value_expr} as Map)"
514 converted_key = self._conversion_expression(
515 field_type.key_type,
516 "key",
517 False,
518 parent_stack,

Callers 1

generate_unionMethod · 0.95

Calls 4

dart_typeMethod · 0.95
_typed_array_or_listMethod · 0.95
_dense_array_typeMethod · 0.95

Tested by

no test coverage detected