message_flow/sagas/orchestration/saga_data_serde.py (16 lines of code) (raw):

import json from typing import TypeVar from .saga_data_mapping import SagaDataMapping from .serialized_saga_data import SerializedSagaData __all__ = ["SagaDataSerde"] Data = TypeVar("Data") class SagaDataSerde: @staticmethod def serialize_saga_data(saga_data: Data) -> SerializedSagaData: return SerializedSagaData(saga_data.__class__.__name__, json.dumps(saga_data.to_dict())) # type: ignore @staticmethod def deserialize_saga_data( serialized_saga_data: SerializedSagaData, saga_data_mapping: SagaDataMapping ) -> Data: mapped_class = saga_data_mapping.map(serialized_saga_data.saga_data_type) return mapped_class.from_dict(json.loads(serialized_saga_data.saga_data_json)) # type: ignore