from enum import Enum from pydantic import BaseModel, Field, TypeAdapter from typing import Annotated, Union, Literal __all__ = ['EClientMessage', 'MsgUserMessage', 'ClientMessage'] class EClientMessage(str, Enum): USER_MESSAGE = "USER_MESSAGE" class MsgUserMessage(BaseModel): """ Полное сообщение от пользователя. """ type: Literal[EClientMessage.USER_MESSAGE] = EClientMessage.USER_MESSAGE text: str """ Текст сообщения. """ ClientMessage = TypeAdapter(Annotated[ Union[MsgUserMessage,], Field(discriminator="type") ]) """ Объединяет все типы входящих сообщений в одно для удобной автоматической десериализации.\n Pydantic сам определит нужный тип в зависимости от поля ``type``.\n Использование:\n msg = ClientMessage.model_validate_json(json) """