"""IPC message type definitions.""" from __future__ import annotations from dataclasses import dataclass, field from typing import Any @dataclass class IPCMessage: """A message exchanged between Rust and Python via JSON-line protocol.""" id: str type: str payload: dict[str, Any] = field(default_factory=dict) def to_dict(self) -> dict[str, Any]: return {"id": self.id, "type": self.type, "payload": self.payload} @classmethod def from_dict(cls, data: dict[str, Any]) -> IPCMessage: return cls( id=data.get("id", ""), type=data.get("type", ""), payload=data.get("payload", {}), ) def progress_message(request_id: str, percent: int, stage: str, message: str) -> IPCMessage: return IPCMessage( id=request_id, type="progress", payload={"percent": percent, "stage": stage, "message": message}, ) def partial_segment_message(request_id: str, segment_data: dict) -> IPCMessage: return IPCMessage(id=request_id, type="pipeline.segment", payload=segment_data) def speaker_update_message(request_id: str, updates: list[dict]) -> IPCMessage: return IPCMessage(id=request_id, type="pipeline.speaker_update", payload={"updates": updates}) def error_message(request_id: str, code: str, message: str) -> IPCMessage: return IPCMessage( id=request_id, type="error", payload={"code": code, "message": message}, ) def ready_message() -> IPCMessage: return IPCMessage(id="system", type="ready", payload={"version": "0.1.0"})