use std::time::Duration;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("connection failed: {0}")]
Connect(#[source] std::io::Error),
#[error("TLS handshake failed: {0}")]
Tls(String),
#[error("connection closed by device")]
Disconnected,
#[error("message framing error: {0}")]
Framing(String),
#[error("protobuf decode error: {0}")]
Protobuf(#[from] prost::DecodeError),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("request timed out after {0:?}")]
Timeout(Duration),
#[error("application launch failed: {reason}")]
LaunchFailed {
reason: String,
},
#[error("media load failed: {reason}")]
LoadFailed {
reason: String,
detailed_error: Option<String>,
},
#[error("invalid request (id={request_id}): {reason}")]
InvalidRequest {
request_id: u32,
reason: String,
},
#[error("payload must be a JSON object")]
InvalidPayload,
#[error("discovery failed: {0}")]
Discovery(String),
#[error("file not found: {0}")]
FileNotFound(String),
#[error("no active media session")]
NoMediaSession,
#[error("no running application")]
NoApplication,
#[error("{0}")]
Internal(String),
}
pub type Result<T> = std::result::Result<T, Error>;