Исходный код EJIO.utils.serialization.serializable

## /utils/serialization/serializable.py

from ..interface import Dictable
from .serializer import Serializer
from .err import SerializationError
from typing import Protocol, Self, Any

__all__ = [
    'Serializable',
]


[документация] class Serializable(Dictable, Protocol): """ Интерфейс сериализуемых объектов, поддерживающий преобразование в строку и из строки с любым сериализатором. Объекты должны уметь преобразовываться в/из словаря (Dictable), а также работать с внешним сериализатором. """ __slots__ = ()
[документация] def serialize(self, serializer: type[Serializer], /, **kwargs: Any) -> str: """ Сериализовать объект с помощью переданного сериализатора. :param serializer: Класс сериализатора (например, JSONSerializer). :param kwargs: Ключевые параметры для сереализатора. :return: Строка с сериализованными данными. :raises SerializationError: В случае ошибок сериализации. """ try: return serializer.serialize(self.to_dict(), **kwargs) except SerializationError as e: raise SerializationError( f"Serialization of {self.__class__.__name__} using {serializer.__name__} failed") from e
[документация] @classmethod def deserialize(cls, data: str, serializer: type[Serializer], /, **kwargs: Any) -> Self: """ Десериализовать объект из строки с использованием сериализатора. :param data: сериализованная строка. :param serializer: Класс сериализатора. :param kwargs: Ключевые параметры для сереализатора. :return: Новый экземпляр объекта. :raises SerializationError: В случае ошибок десериализации. """ try: return cls.from_dict(serializer.deserialize(data, **kwargs)) except SerializationError as e: raise SerializationError(f"Deserialization of {cls.__name__} using {serializer.__name__} failed") from e