From 28030412d01aa20185d725b25c8123c59b64e3b2 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 25 Aug 2026 01:46:58 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20BaseEvent=20=D1=81=20?= =?UTF-8?q?=D1=83=D0=BD=D0=B8=D0=B2=D0=B5=D1=80=D1=81=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=BC=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=BC?= =?UTF-8?q?=20to=5Fpayload=20=D0=B4=D0=BB=D1=8F=20=D0=B3=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BF=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mind_reader/state_machines/base_event.py | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/mind_reader/state_machines/base_event.py diff --git a/src/mind_reader/state_machines/base_event.py b/src/mind_reader/state_machines/base_event.py new file mode 100644 index 0000000..aedf931 --- /dev/null +++ b/src/mind_reader/state_machines/base_event.py @@ -0,0 +1,22 @@ +from dataclasses import asdict, dataclass, is_dataclass +from enum import StrEnum +from typing import Any + + +def _factory(d: list[tuple[str, Any]]) -> dict[str, Any]: + def _convert(obj: Any) -> Any: + if isinstance(obj, StrEnum): + return obj.value + if isinstance(obj, list | tuple): + return [_convert(item) for item in obj] + if isinstance(obj, dict): + return {k: _convert(v) for k, v in obj.items()} + return obj + + return {k: _convert(v) for k, v in d} + + +@dataclass(frozen=True) +class BaseEvent: + def to_payload(self) -> dict[str, Any]: + return asdict(self, dict_factory=_factory)