use serde::Serialize;
pub mod client;
pub mod group;
pub mod server;
pub mod stream;
pub mod errors;
mod de;
mod notification;
mod request;
mod result;
pub use de::DeserializationError;
pub(super) use de::{SentRequests, SnapcastDeserializer};
pub(super) use request::{Request, RequestMethod};
pub use notification::Notification;
pub use request::Method;
pub use result::SnapcastResult;
#[derive(Debug, Clone, Serialize, PartialEq)]
#[serde(untagged)]
pub enum Message {
Result {
id: uuid::Uuid,
jsonrpc: String,
result: Box<SnapcastResult>,
},
Error {
id: uuid::Uuid,
jsonrpc: String,
error: errors::SnapcastError,
},
Notification {
jsonrpc: String,
#[serde(flatten)]
method: Box<Notification>,
},
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[serde(untagged)]
pub enum ValidMessage {
Result {
id: uuid::Uuid,
jsonrpc: String,
result: Box<SnapcastResult>,
},
Notification {
jsonrpc: String,
#[serde(flatten)]
method: Box<Notification>,
},
}
impl TryFrom<Message> for ValidMessage {
type Error = errors::SnapcastError;
fn try_from(value: Message) -> Result<Self, Self::Error> {
match value {
Message::Result { id, jsonrpc, result } => Ok(ValidMessage::Result { id, jsonrpc, result }),
Message::Error { error, .. } => Err(error),
Message::Notification { jsonrpc, method } => Ok(ValidMessage::Notification { jsonrpc, method }),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum ConnectionStatus {
Connected,
Disconnected,
ReconnectFailed,
}