seedlink-rs-protocol 0.2.0

SeedLink protocol types, commands, and frame parsing
Documentation
use crate::version::ProtocolVersion;

#[derive(Debug, thiserror::Error)]
pub enum SeedlinkError {
    #[error("frame too short: expected {expected}, actual {actual}")]
    FrameTooShort { expected: usize, actual: usize },

    #[error("invalid signature: expected {expected:?}, actual {actual:?}")]
    InvalidSignature {
        expected: &'static str,
        actual: [u8; 2],
    },

    #[error("invalid sequence: {0}")]
    InvalidSequence(String),

    #[error("invalid command: {0}")]
    InvalidCommand(String),

    #[error("version mismatch: {command} not valid for {version:?}")]
    VersionMismatch {
        command: &'static str,
        version: ProtocolVersion,
    },

    #[error("invalid response: {0}")]
    InvalidResponse(String),

    #[error("server error: [{code}] {description}")]
    ServerError { code: String, description: String },

    #[error("invalid info level: {0}")]
    InvalidInfoLevel(String),

    #[error("invalid payload format: {0}")]
    InvalidPayloadFormat(u8),

    #[error("invalid payload subformat: {0}")]
    InvalidPayloadSubformat(u8),

    #[error("payload length mismatch: expected {expected}, actual {actual}")]
    PayloadLengthMismatch { expected: usize, actual: usize },

    #[error("miniseed error: {0}")]
    Miniseed(#[from] miniseed_rs::MseedError),
}

pub type Result<T> = std::result::Result<T, SeedlinkError>;