use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IpcMessage {
pub id: String,
pub cmd: String,
pub payload: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IpcResponse {
pub id: String,
pub success: bool,
pub data: serde_json::Value,
}
pub trait IpcHandler: Send + Sync {
fn handle(&self, message: IpcMessage) -> IpcResponse;
}
pub struct FnIpcHandler<F>
where
F: Fn(IpcMessage) -> IpcResponse + Send + Sync,
{
handler: F,
}
impl<F> FnIpcHandler<F>
where
F: Fn(IpcMessage) -> IpcResponse + Send + Sync,
{
pub fn new(handler: F) -> Self {
Self { handler }
}
}
impl<F> IpcHandler for FnIpcHandler<F>
where
F: Fn(IpcMessage) -> IpcResponse + Send + Sync,
{
fn handle(&self, message: IpcMessage) -> IpcResponse {
(self.handler)(message)
}
}