mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-07-25 13:06:53 +00:00
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""The interface for serializing."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from abc import ABC, abstractmethod
|
|
from typing import Dict, Optional, Type
|
|
|
|
|
|
class Serializable(ABC):
|
|
"""The serializable abstract class."""
|
|
|
|
_serializer: Optional["Serializer"] = None
|
|
|
|
@abstractmethod
|
|
def to_dict(self) -> Dict:
|
|
"""Convert the object's state to a dictionary."""
|
|
|
|
def serialize(self) -> bytes:
|
|
"""Convert the object into bytes for storage or transmission.
|
|
|
|
Returns:
|
|
bytes: The byte array after serialization
|
|
"""
|
|
if self._serializer is None:
|
|
raise ValueError(
|
|
"Serializer is not set. Please set the serializer before "
|
|
"serialization."
|
|
)
|
|
return self._serializer.serialize(self)
|
|
|
|
def set_serializer(self, serializer: "Serializer") -> None:
|
|
"""Set the serializer for current serializable object.
|
|
|
|
Args:
|
|
serializer (Serializer): The serializer to set
|
|
"""
|
|
self._serializer = serializer
|
|
|
|
|
|
class Serializer(ABC):
|
|
"""The serializer abstract class for serializing cache keys and values."""
|
|
|
|
@abstractmethod
|
|
def serialize(self, obj: Serializable) -> bytes:
|
|
"""Serialize a cache object.
|
|
|
|
Args:
|
|
obj (Serializable): The object to serialize
|
|
"""
|
|
|
|
@abstractmethod
|
|
def deserialize(self, data: bytes, cls: Type[Serializable]) -> Serializable:
|
|
"""Deserialize data back into a cache object of the specified type.
|
|
|
|
Args:
|
|
data (bytes): The byte array to deserialize
|
|
cls (Type[Serializable]): The type of current object
|
|
|
|
Returns:
|
|
Serializable: The serializable object
|
|
"""
|