"""Submission and event queues for the engine protocol.""" from __future__ import annotations from collections import deque from dataclasses import dataclass, field from typing import Deque, Iterable from protocol.events import EventMsg from protocol.op import Op @dataclass class QueuePair: submissions: Deque[Op] = field(default_factory=deque) events: Deque[EventMsg] = field(default_factory=deque) def submit(self, op: Op) -> None: self.submissions.append(op) def has_submissions(self) -> bool: return bool(self.submissions) def pop_submission(self) -> Op: return self.submissions.popleft() def emit(self, event: EventMsg) -> None: self.events.append(event) def drain_events(self) -> Iterable[EventMsg]: while self.events: yield self.events.popleft()