from google.protobuf.message import DecodeError from frostfs_sdk.protos.models.session import types_pb2 as types_pb2_session class SessionMapper: @staticmethod def serialize(token: types_pb2_session.SessionToken) -> bytes: """ Serializes a SessionToken object into a byte array. :param token: A SessionToken Protobuf object. :return: A byte array representing the serialized SessionToken. :raises ValueError: If the input token is None. :raises Exception: If serialization fails. """ if token is None: raise ValueError(f"Input parameter is missing: {types_pb2_session.SessionToken.__name__}") try: # Serialize the token to bytes return token.SerializeToString() except Exception as e: raise Exception(f"Serialization failed: {str(e)}") @staticmethod def deserialize_session_token(bytes_data: bytes) -> types_pb2_session.SessionToken: """ Deserializes a byte array into a SessionToken object. :param bytes_data: A byte array representing the serialized SessionToken. :return: A SessionToken Protobuf object. :raises ValueError: If the input byte array is None or empty. :raises Exception: If deserialization fails. """ if not bytes_data: raise ValueError(f"Input parameter is missing: {types_pb2_session.SessionToken.__name__}") try: # Deserialize the byte array into a SessionToken object session_token = types_pb2_session.SessionToken() session_token.ParseFromString(bytes_data) return session_token except DecodeError as e: raise Exception(f"Deserialization failed: {str(e)}")