# Copyright 2026 zhaoxi826 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from typing import Type, TypeVar from pydantic import BaseModel T = TypeVar("T", bound=Type[BaseModel]) def pickle(cls: T) -> T: """ 这是一个类装饰器,用来接管 Pydantic 对象的 Pickle 序列化流程。 它强迫 Pickle 使用 Pydantic 经过 Rust 优化的 JSON 导出/导入逻辑。 """ def __reduce__(self): # 1. 序列化:触发 Pydantic-core (Rust) 的极速序列化 data = self.model_dump_json() # 2. 反序列化:告诉 Pickle 重建时调用 cls.model_validate_json return cls.model_validate_json, (data,) # 动态把这个魔术方法“缝”到类上 cls.__reduce__ = __reduce__ return cls