| 813 | |
| 814 | |
| 815 | def build_case( |
| 816 | serializer: str, |
| 817 | operation: str, |
| 818 | datatype: str, |
| 819 | obj: Any, |
| 820 | *, |
| 821 | fory_writer: pyfory.Fory, |
| 822 | fory_reader: pyfory.Fory, |
| 823 | bench_pb2, |
| 824 | ) -> Tuple[Callable[..., Any], Tuple[Any, ...]]: |
| 825 | if serializer == "fory": |
| 826 | if operation == "serialize": |
| 827 | return fory_serialize, (fory_writer, obj) |
| 828 | return fory_deserialize, (fory_reader, fory_writer.serialize(obj)) |
| 829 | |
| 830 | if serializer == "pickle": |
| 831 | if operation == "serialize": |
| 832 | return pickle_serialize, (obj,) |
| 833 | return pickle_deserialize, ( |
| 834 | pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL), |
| 835 | ) |
| 836 | |
| 837 | if serializer == "protobuf": |
| 838 | if operation == "serialize": |
| 839 | return protobuf_serialize, (bench_pb2, datatype, obj) |
| 840 | to_pb, _, _ = PROTO_CONVERTERS[datatype] |
| 841 | pb_binary = to_pb(bench_pb2, obj).SerializeToString() |
| 842 | return protobuf_deserialize, (bench_pb2, datatype, pb_binary) |
| 843 | |
| 844 | raise ValueError(f"Unsupported serializer: {serializer}") |
| 845 | |
| 846 | |
| 847 | def calculate_serialized_sizes( |