Skip to main content

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}
49
50impl From<flagd_evaluation_engine::error::FlagdEvaluationError> for FlagdError {
51    fn from(error: flagd_evaluation_engine::error::FlagdEvaluationError) -> Self {
52        match error {
53            flagd_evaluation_engine::error::FlagdEvaluationError::Provider(s) => {
54                FlagdError::Provider(s)
55            }
56            flagd_evaluation_engine::error::FlagdEvaluationError::Config(s) => {
57                FlagdError::Config(s)
58            }
59            flagd_evaluation_engine::error::FlagdEvaluationError::Parse(s) => FlagdError::Parse(s),
60            flagd_evaluation_engine::error::FlagdEvaluationError::Io(e) => FlagdError::Io(e),
61            flagd_evaluation_engine::error::FlagdEvaluationError::Json(e) => FlagdError::Json(e),
62        }
63    }
64}