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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//! Hold error types for the server and related functionality.

use std::io;
use tokio::sync::mpsc::error::TrySendError;

use crate::server::request::ZingoIndexerRequest;

/// Zingo-Indexer queue errors.
#[derive(Debug, thiserror::Error)]
pub enum QueueError<T> {
    /// Returned when a requests is pushed to a full queue.
    #[error("Queue Full")]
    QueueFull(T),
    /// Returned when a worker or dispatcher tries to receive from an empty queue.
    #[error("Queue Empty")]
    QueueEmpty,
    /// Returned when a worker or dispatcher tries to receive from a closed queue.
    #[error("Queue Disconnected")]
    QueueClosed,
}

/// Zingo-Indexer request errors.
#[derive(Debug, thiserror::Error)]
pub enum RequestError {
    /// Errors originating from incorrect enum types being called.
    #[error("Incorrect variant")]
    IncorrectVariant,
    /// System time errors.
    #[error("System time error: {0}")]
    SystemTimeError(#[from] std::time::SystemTimeError),
}

/// Zingo-Indexer ingestor errors.
#[derive(Debug, thiserror::Error)]
pub enum IngestorError {
    /// Request based errors.
    #[error("Request error: {0}")]
    RequestError(#[from] RequestError),
    /// Tcp listener based error.
    #[error("Failed to accept TcpStream: {0}")]
    ClientConnectionError(#[from] io::Error),
    /// Error from failing to send new request to the queue.
    #[error("Failed to send request to the queue: {0}")]
    QueuePushError(#[from] TrySendError<ZingoIndexerRequest>),
}

/// Zingo-Indexer worker errors.
#[derive(Debug, thiserror::Error)]
pub enum WorkerError {
    /// Tonic transport error.
    #[error("Tonic transport error: {0}")]
    TonicTransportError(#[from] tonic::transport::Error),
    /// Tokio join error.
    #[error("Tokio join error: {0}")]
    TokioJoinError(#[from] tokio::task::JoinError),
    /// Worker Pool Full.
    #[error("Worker Pool Full")]
    WorkerPoolFull,
    /// Worker Pool at idle.
    #[error("Worker Pool a idle")]
    WorkerPoolIdle,
}

/// Zingo-Indexer server errors.
#[derive(Debug, thiserror::Error)]
pub enum ServerError {
    /// Request based errors.
    #[error("Request error: {0}")]
    RequestError(#[from] RequestError),
    /// Ingestor based errors.
    #[error("Ingestor error: {0}")]
    IngestorError(#[from] IngestorError),
    /// Worker based errors.
    #[error("Worker error: {0}")]
    WorkerError(#[from] WorkerError),
    /// Server configuration errors.
    #[error("Server configuration error: {0}")]
    ServerConfigError(String),
}