pub mod frame;
pub use frame::{decode_frame, encode_frame, FrameError, MAX_FRAME_BYTES};
use serde::{Deserialize, Serialize};
use thiserror::Error;
use crate::vortix_core::engine::input::UserCommand;
use crate::vortix_core::engine::state::Connection;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum IpcOp {
Execute(UserCommand),
Snapshot,
Subscribe,
Shutdown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IpcRequest {
pub id: u64,
pub op: IpcOp,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IpcResponse {
pub id: u64,
pub result: Result<IpcResult, IpcError>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum IpcResult {
Accepted,
Snapshot { state: Connection },
Subscribed,
ShuttingDown,
}
#[derive(Debug, Clone, Error, Serialize, Deserialize)]
#[non_exhaustive]
pub enum IpcError {
#[error("client UID mismatch — daemon refuses to authorize this request")]
Unauthorized,
#[error("malformed request: {0}")]
MalformedRequest(String),
#[error("daemon is shutting down")]
ShuttingDown,
#[error("internal daemon error: {0}")]
Internal(String),
}