open_feature_flagd/
error.rs1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum FlagdError {
6 #[error("Provider error: {0}")]
7 Provider(String),
8 #[error("Connection error: {0}")]
9 Connection(String),
10 #[error("Invalid configuration: {0}")]
11 Config(String),
12 #[error("Sync error: {0}")]
13 Sync(String),
14 #[error("Parse error: {0}")]
15 Parse(String),
16 #[error("Timeout: {0}")]
17 Timeout(String),
18 #[error("IO error: {0}")]
19 Io(#[from] std::io::Error),
20 #[error("JSON error: {0}")]
21 Json(#[from] serde_json::Error),
22 #[error("Channel send error: {0}")]
23 Channel(String),
24}
25
26impl From<Box<dyn std::error::Error>> for FlagdError {
27 fn from(error: Box<dyn std::error::Error>) -> Self {
28 FlagdError::Provider(error.to_string())
29 }
30}
31
32impl From<Box<dyn std::error::Error + Send + Sync>> for FlagdError {
33 fn from(error: Box<dyn std::error::Error + Send + Sync>) -> Self {
34 FlagdError::Provider(error.to_string())
35 }
36}
37
38impl<T> From<tokio::sync::mpsc::error::SendError<T>> for FlagdError {
39 fn from(error: tokio::sync::mpsc::error::SendError<T>) -> Self {
40 FlagdError::Channel(error.to_string())
41 }
42}
43
44impl From<tokio::time::error::Elapsed> for FlagdError {
45 fn from(error: tokio::time::error::Elapsed) -> Self {
46 FlagdError::Timeout(error.to_string())
47 }
48}