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

Class StructFieldSerializerVisitor

python/pyfory/struct.py:873–973  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

871
872
873class StructFieldSerializerVisitor(TypeVisitor):
874 def __init__(
875 self,
876 type_resolver,
877 ):
878 self.type_resolver = type_resolver
879
880 def visit_array(self, field_name, elem_type, carrier, types_path=None):
881 type_id = _array_type_id(elem_type, carrier)
882 from pyfory.serializer import (
883 ForyArrayFieldSerializer,
884 Numpy1DArraySerializer,
885 PyArraySerializer,
886 fory_array_wrapper_type,
887 typecode_dict,
888 typeid_code,
889 )
890
891 if carrier == "array":
892 wrapper_type = fory_array_wrapper_type(type_id)
893 return ForyArrayFieldSerializer(self.type_resolver, wrapper_type, type_id, field_name)
894 if carrier == "pyarray":
895 typecode = typeid_code.get(type_id)
896 if typecode is None:
897 raise TypeError(f"pyfory.PyArray does not support array type id {type_id}")
898 _itemsize, ftype, _type_id = typecode_dict[typecode]
899 return PyArraySerializer(self.type_resolver, ftype, type_id)
900 if carrier == "ndarray":
901 for dtype, (_itemsize, _format, ftype, dtype_type_id) in Numpy1DArraySerializer.dtypes_dict.items():
902 if dtype_type_id == type_id:
903 if ENABLE_FORY_CYTHON_SERIALIZATION:
904 from pyfory.serialization import Numpy1DArraySerializer as Numpy1DArrayRuntimeSerializer
905
906 return Numpy1DArrayRuntimeSerializer(self.type_resolver, ftype, dtype)
907 return Numpy1DArraySerializer(self.type_resolver, ftype, dtype)
908 raise TypeError(f"pyfory.NDArray does not support array type id {type_id}")
909 raise TypeError(f"Unknown array carrier {carrier!r}")
910
911 def visit_list(self, field_name, elem_type, types_path=None):
912 from pyfory.serializer import ListSerializer # Local import
913 from pyfory.type_util import unwrap_ref
914
915 # Infer type recursively for type such as List[Dict[str, str]]
916 elem_type, elem_ref_override = unwrap_ref(elem_type)
917 elem_serializer = infer_field("item", elem_type, self, types_path=types_path)
918 return ListSerializer(self.type_resolver, list, elem_serializer, elem_ref_override)
919
920 def visit_set(self, field_name, elem_type, types_path=None):
921 from pyfory.serializer import SetSerializer # Local import
922 from pyfory.type_util import unwrap_ref
923
924 # Infer type recursively for type such as Set[Dict[str, str]]
925 elem_type, elem_ref_override = unwrap_ref(elem_type)
926 elem_serializer = infer_field("item", elem_type, self, types_path=types_path)
927 return SetSerializer(self.type_resolver, set, elem_serializer, elem_ref_override)
928
929 def visit_tuple(self, field_name, elem_types, types_path=None):
930 from pyfory.serializer import TupleSerializer # Local import

Callers 5

_get_case_type_infoMethod · 0.90
create_serializerMethod · 0.90
_extract_field_infosFunction · 0.85
__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected