roon-moo 0.5.3

MOO WebSocket RPC protocol for Roon audio system
Documentation
#[derive(Debug, thiserror::Error)]
pub enum MooError {
    #[error("empty message")]
    Empty,
    #[error("missing protocol prefix: expected \"MOO/1\", got {0:?}")]
    InvalidProtocol(String),
    #[error("missing verb in first line")]
    MissingVerb,
    #[error("unknown verb: {0:?}")]
    UnknownVerb(String),
    #[error("missing name in first line")]
    MissingName,
    #[error("missing required header: Request-Id")]
    MissingRequestId,
    #[error("invalid Request-Id: {0:?}")]
    InvalidRequestId(String),
    #[error("Content-Length present but Content-Type missing")]
    ContentLengthWithoutContentType,
    #[error("invalid Content-Length: {0:?}")]
    InvalidContentLength(String),
    #[error("body length {actual} does not match Content-Length {expected}")]
    BodyLengthMismatch { expected: usize, actual: usize },
    #[error("invalid UTF-8 in headers")]
    InvalidHeaderUtf8,
    #[error("malformed header line: {0:?}")]
    MalformedHeader(String),
    #[error("invalid JSON body: {0}")]
    InvalidJson(#[from] serde_json::Error),
    #[error("WebSocket error: {0}")]
    WebSocket(String),
    #[error("connection closed")]
    ConnectionClosed,
}