open_feature_flagd/
error.rs

1use thiserror::Error;
2
3/// Error type for flagd operations
4#[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}