use serde::{Deserialize, Serialize};
use crate::state::{EqBand, FilterState, NodeInfo, NullSinkState};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "cmd")]
pub enum Request {
GetStatus,
SetBands { bands: Vec<EqBand> },
SetPreamp { gain: f32 },
SetBypass { bypass: bool },
ConnectDevice { node_id: u32 },
DisconnectDevice { node_id: u32 },
Shutdown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Response {
pub ok: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<DaemonStatus>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "event")]
pub enum PushEvent {
PeakUpdate {
l: f32,
r: f32,
},
NodeList {
nodes: Vec<NodeInfo>,
},
FilterReady {
node_id: u32,
},
FilterStateChanged {
state: FilterState,
},
StateChange {
state: String,
},
NullSinkCreated {
module_id: u32,
},
SourceActive {
active: bool,
},
NullSinkMissing,
Error {
message: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DaemonStatus {
pub bands: Vec<EqBand>,
pub bypass: bool,
pub preamp: f32,
pub nodes: Vec<NodeInfo>,
pub pw_connected: bool,
pub filter_state: FilterState,
pub null_sink: NullSinkState,
pub filter_node_id: Option<u32>,
pub connected_devices: Vec<u32>,
}