Skip to main content

rio_rs/
errors.rs

1//! Repository of all error types for this crate using [thiserror]
2use serde::{Deserialize, Serialize};
3use thiserror::Error;
4
5use crate::protocol::ClientError;
6
7/// Message handling error. It occurs, mostly, from the object look up to
8/// the end of its execution
9#[derive(Error, Debug, PartialEq, Eq)]
10pub enum HandlerError {
11    #[error("object not found")]
12    ObjectNotFound,
13
14    #[error("message handler not found")]
15    HandlerNotFound,
16
17    #[error("message serialization error")]
18    MessageSerializationError,
19
20    #[error("response serialization error")]
21    ResponseSerializationError,
22
23    #[error("unknown execution error")]
24    Unknown,
25
26    #[error("error caused internally by the application")]
27    ApplicationError(Vec<u8>),
28}
29
30/// Represents errors that occur in the lifecyle functions of an object.
31/// This is, in most of the [ServiceObject](crate::service_object::ServiceObject)
32/// hook functions
33#[derive(Error, Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
34pub enum ServiceObjectLifeCycleError {
35    #[error("unknown error")]
36    Unknown,
37}
38
39/// Errors triggered while building an [crate::client::Client] using
40/// [crate::client::ClientBuilder]
41#[derive(Error, Debug, PartialEq, Eq)]
42pub enum ClientBuilderError {
43    #[error("no MembershipStorage provided")]
44    NoMembershipStorage,
45}
46
47/// Represent errors that  happen during the [crate::server::Server] setup
48#[derive(Error, Debug, PartialEq, Eq)]
49pub enum ServerError {
50    #[error("bind")]
51    Bind(String),
52
53    #[error("client builder")]
54    ClientBuilder(ClientError),
55
56    #[error("cluster provider")]
57    ClusterProviderServe(ClusterProviderServeError),
58
59    #[error("Run")]
60    Run,
61}
62
63/// Error type for the cluster redevouz/membeship trait
64/// ([crate::cluster::storage::MembershipStorage])
65#[derive(Error, Debug, PartialEq, Eq)]
66pub enum MembershipError {
67    #[error("upstream error")]
68    Upstream(String),
69
70    #[error("unknown")]
71    Unknown(String),
72
73    #[error("This MembershipStorage is Read-only")]
74    ReadOnly(String),
75}
76
77#[cfg(feature = "sql")]
78impl From<sqlx::Error> for MembershipError {
79    fn from(err: sqlx::Error) -> Self {
80        MembershipError::Upstream(err.to_string())
81    }
82}
83
84/// Error type for the serve function of the cluster provider algorith trait
85/// ([crate::cluster::membership_protocol::ClusterProvider])
86#[derive(Error, Debug, PartialEq, Eq)]
87pub enum ClusterProviderServeError {
88    #[error("can't communicate with membership provider's storage")]
89    MembershipProviderError(String),
90
91    #[error("error pasing value into a SocketAddr")]
92    SocketAddrParsingError,
93
94    #[error("unknown cluster provider serve error")]
95    Unknown(String),
96}
97
98impl From<MembershipError> for ClusterProviderServeError {
99    fn from(err: MembershipError) -> Self {
100        ClusterProviderServeError::MembershipProviderError(err.to_string())
101    }
102}
103
104/// Error type for service object state management
105#[derive(Error, Debug, PartialEq)]
106pub enum LoadStateError {
107    #[error("object not found")]
108    ObjectNotFound,
109
110    #[error("unknown error")]
111    Unknown,
112
113    #[error("deserialization error")]
114    DeserializationError,
115
116    #[error("serialization error")]
117    SerializationError,
118}