33 lines
No EOL
975 B
Python
33 lines
No EOL
975 B
Python
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)
|
|
""" |