1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use thiserror::Error;
use tower::BoxError;

use crate::http::error::RestError;

use super::protocol::frame::Name;

/// Websocket API errors.
#[derive(Debug, Error)]
pub enum WsError {
    /// Errors from tokio-tower.
    #[error("tokio-tower: {0}")]
    TokioTower(anyhow::Error),
    /// Transport timeout.
    #[error("transport timeout")]
    TransportTimeout,
    /// Transport is borken.
    #[error("transport is broken")]
    TransportIsBoken,
    /// Websocket errors.
    #[error("websocket: {0}")]
    Websocket(#[from] tokio_tungstenite::tungstenite::Error),
    /// Json errors.
    #[error("json: {0}")]
    Json(#[from] serde_json::Error),
    /// Duplicate stream id.
    #[error("duplicate stream id")]
    DuplicateStreamId,
    /// No response.
    #[error("no response")]
    NoResponse,
    /// Unexpected frame.
    #[error("unexpected frame: {0}")]
    UnexpectedFrame(anyhow::Error),
    /// Stream has been subscribed.
    #[error("stream {0} has been subscribed")]
    StreamSubscribed(Name),
    /// Empty stream name.
    #[error("empty stream name")]
    EmptyStreamName,
    /// Unknown connection error.
    #[error("unknown connection error: {0}")]
    UnknownConnection(BoxError),
    /// Main stream not found.
    #[error("main stream not found")]
    MainStreamNotFound,
    /// Invalid Uri.
    #[error("invalid uri")]
    InvalidUri(#[from] http::uri::InvalidUri),
    /// Login error.
    #[error("login: {0}")]
    Login(#[from] RestError),
    /// Listen key is expired.
    #[error("listen key is expired: at={0}")]
    ListenKeyExpired(i64),
}