renegade_sdk/renegade_wallet_client/
mod.rs

1//! The renegade wallet client manages Renegade wallet operations
2
3use uuid::Uuid;
4
5use crate::http::RelayerHttpClientError;
6
7pub mod actions;
8pub mod client;
9pub mod config;
10pub(crate) mod conversions;
11pub(crate) mod utils;
12pub mod websocket;
13
14/// The error type for the renegade wallet client
15#[derive(Debug, thiserror::Error)]
16pub enum RenegadeClientError {
17    /// Custom error
18    #[error("error: {0}")]
19    Custom(String),
20    /// An invalid order was provided
21    #[error("invalid order: {0}")]
22    InvalidOrder(String),
23    /// An invalid order update was provided
24    #[error("invalid order update: {0}")]
25    InvalidOrderUpdate(String),
26    /// An error signing a message
27    #[error("failed to sign message: {0}")]
28    Signing(String),
29    /// Attempted to invoke admin API with a non-admin client
30    #[error("not admin client")]
31    NotAdmin,
32    /// A relayer error
33    #[error("relayer error: {0}")]
34    Relayer(RelayerHttpClientError),
35    /// A serde error
36    #[error("serde error: {0}")]
37    Serde(String),
38    /// An error setting up the wallet
39    #[error("failed to setup wallet: {0}")]
40    Setup(String),
41    /// A task error
42    #[error("task error: task {task_id}: {message}")]
43    Task {
44        /// The task identifier
45        task_id: Uuid,
46        /// The error message
47        message: String,
48    },
49    /// An error managing a websocket topic subscription
50    #[error("websocket topic subscription error: {0}")]
51    Subscription(String),
52    /// A websocket error
53    #[error("websocket error: {0}")]
54    Websocket(String),
55}
56
57impl RenegadeClientError {
58    /// Create a new custom error
59    #[allow(clippy::needless_pass_by_value)]
60    pub fn custom<T: ToString>(msg: T) -> Self {
61        Self::Custom(msg.to_string())
62    }
63
64    /// Create a new invalid order error
65    #[allow(clippy::needless_pass_by_value)]
66    pub fn invalid_order<T: ToString>(msg: T) -> Self {
67        Self::InvalidOrder(msg.to_string())
68    }
69
70    /// Create a new invalid order update error
71    #[allow(clippy::needless_pass_by_value)]
72    pub fn invalid_order_update<T: ToString>(msg: T) -> Self {
73        Self::InvalidOrderUpdate(msg.to_string())
74    }
75
76    /// Create a new signing error
77    #[allow(clippy::needless_pass_by_value)]
78    pub fn signing<T: ToString>(msg: T) -> Self {
79        Self::Signing(msg.to_string())
80    }
81
82    /// Create a new setup error
83    #[allow(clippy::needless_pass_by_value)]
84    pub fn setup<T: ToString>(msg: T) -> Self {
85        Self::Setup(msg.to_string())
86    }
87
88    /// Create a new serde error
89    #[allow(clippy::needless_pass_by_value)]
90    pub fn serde<T: ToString>(msg: T) -> Self {
91        Self::Serde(msg.to_string())
92    }
93
94    /// Create a new task error
95    #[allow(clippy::needless_pass_by_value)]
96    pub fn task<T: ToString>(task_id: Uuid, msg: T) -> Self {
97        Self::Task { task_id, message: msg.to_string() }
98    }
99
100    /// Create a new websocket topic subscription error
101    #[allow(clippy::needless_pass_by_value)]
102    pub fn subscription<T: ToString>(msg: T) -> Self {
103        Self::Subscription(msg.to_string())
104    }
105
106    /// Create a new websocket error
107    #[allow(clippy::needless_pass_by_value)]
108    pub fn websocket<T: ToString>(msg: T) -> Self {
109        Self::Websocket(msg.to_string())
110    }
111}
112
113impl From<RelayerHttpClientError> for RenegadeClientError {
114    fn from(err: RelayerHttpClientError) -> Self {
115        Self::Relayer(err)
116    }
117}