irtt-client 0.1.0

IRTT-compatible Rust client library
Documentation
use std::{io, time::Duration};

use thiserror::Error;

#[derive(Debug, Error)]
pub enum ClientError {
    #[error("failed to resolve server address {addr:?}")]
    Resolve { addr: String },
    #[error("socket error: {0}")]
    Socket(#[from] io::Error),
    #[error("socket option error while trying to {operation} for {remote}: {source}")]
    SocketOption {
        operation: &'static str,
        remote: std::net::SocketAddr,
        source: io::Error,
    },
    #[error("failed to restore configured socket read timeout after open negotiation: {source}")]
    ReadTimeoutRestore { source: io::Error },
    #[error("protocol error: {0}")]
    Protocol(#[from] irtt_proto::ProtoError),
    #[error("all open requests timed out")]
    OpenTimeout,
    #[error("open timeout {timeout:?} is below the minimum {minimum:?}")]
    OpenTimeoutTooSmall {
        timeout: Duration,
        minimum: Duration,
    },
    #[error("open_timeouts must not be empty")]
    NoOpenTimeouts,
    #[error("server rejected the open request")]
    ServerRejected,
    #[error("unexpected no-test open reply")]
    UnexpectedNoTestReply,
    #[error("no-test reply included a non-zero connection token: {token}")]
    NonZeroNoTestToken { token: u64 },
    #[error("protocol version mismatch: requested {requested}, received {received}")]
    ProtocolVersionMismatch { requested: i64, received: i64 },
    #[error("server returned a zero connection token")]
    ZeroToken,
    #[error("strict negotiation rejected changed params: {reason}")]
    NegotiationRejected { reason: String },
    #[error("client is not open")]
    NotOpen,
    #[error("client session is already open")]
    AlreadyOpen,
    #[error("client session is already completed")]
    AlreadyCompleted,
    #[error("client session is already closed")]
    AlreadyClosed,
    #[error("duration is too large to encode as nanoseconds")]
    DurationOverflow,
    #[error("counter {counter} overflowed")]
    CounterOverflow { counter: &'static str },
    #[error("pending probe limit exceeded ({limit})")]
    PendingLimitExceeded { limit: usize },
    #[error("invalid configuration: {reason}")]
    InvalidConfig { reason: String },
    #[error("managed client worker thread panicked")]
    WorkerPanicked,
}

#[derive(Debug, Error, Clone, Copy, PartialEq, Eq)]
pub enum EventSubscriptionError {
    #[error("event subscription is disconnected")]
    Disconnected,
}