| 624 | |
| 625 | |
| 626 | class ForyArrayListAdapterSerializer(Serializer): |
| 627 | def __init__(self, type_resolver, wrapper_type, wrapper_serializer, field_name=None): |
| 628 | super().__init__(type_resolver, wrapper_type) |
| 629 | self.wrapper_type = wrapper_type |
| 630 | self.wrapper_serializer = wrapper_serializer |
| 631 | self.field_name = field_name or "<array>" |
| 632 | self.need_to_write_ref = False |
| 633 | |
| 634 | def _copy_list_to_wrapper(self, value): |
| 635 | if type(value) is not list: |
| 636 | raise TypeError(f"pyfory.Array list adapter for {self.field_name!r} requires list, got {type(value)!r}") |
| 637 | wrapper = self.wrapper_type() |
| 638 | for index, item in enumerate(value): |
| 639 | try: |
| 640 | wrapper.append(item) |
| 641 | except (TypeError, ValueError, OverflowError) as exc: |
| 642 | raise type(exc)(f"{self.field_name}[{index}] invalid for {self.wrapper_type.__name__}: {exc}") from exc |
| 643 | return wrapper |
| 644 | |
| 645 | def write(self, buffer, value): |
| 646 | self.wrapper_serializer.write(buffer, self._copy_list_to_wrapper(value)) |
| 647 | |
| 648 | def read(self, buffer): |
| 649 | return self.wrapper_serializer.read(buffer) |
| 650 | |
| 651 | |
| 652 | class ForyArrayFieldSerializer(Serializer): |