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}
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}