devcycle_bucketing_rs/util/
errors.rs1use crate::events::event::DefaultReason;
2use std::error::Error;
3use std::fmt;
4
5#[derive(Debug)]
6pub struct DevCycleError {
7 pub(crate) details: String,
8}
9
10impl DevCycleError {
11 pub fn new(msg: &str) -> DevCycleError {
12 DevCycleError {
13 details: msg.to_string(),
14 }
15 }
16}
17
18impl fmt::Display for DevCycleError {
19 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20 write!(f, "{}", self.details)
21 }
22}
23
24impl Error for DevCycleError {
25 fn description(&self) -> &str {
26 &self.details
27 }
28}
29
30pub const FAILED_TO_DECIDE_VARIATION: DevCycleError = DevCycleError {
31 details: String::new(),
32};
33pub const FAILED_USER_DOES_NOT_QUALIFY_FOR_TARGETS: DevCycleError = DevCycleError {
34 details: String::new(),
35};
36pub const FAILED_USER_DOES_NOT_QUALIFY_FOR_ROLLOUTS: DevCycleError = DevCycleError {
37 details: String::new(),
38};
39pub const MISSING_VARIABLE: DevCycleError = DevCycleError {
40 details: String::new(),
41};
42pub const MISSING_VARIATION: DevCycleError = DevCycleError {
43 details: String::new(),
44};
45
46pub(crate) fn failed_to_decide_variation() -> DevCycleError {
48 DevCycleError::new("Failed to decide target variation")
49}
50
51pub(crate) fn failed_user_does_not_qualify_for_targets() -> DevCycleError {
52 DevCycleError::new("User does not qualify for any targets")
53}
54
55pub(crate) fn failed_user_does_not_qualify_for_rollouts() -> DevCycleError {
56 DevCycleError::new("User does not qualify for rollouts")
57}
58
59pub(crate) fn missing_variable() -> DevCycleError {
60 DevCycleError::new("Variable not found")
61}
62
63pub(crate) fn missing_variation() -> DevCycleError {
64 DevCycleError::new("Variation not found")
65}
66
67pub(crate) fn missing_config() -> DevCycleError {
68 DevCycleError::new("Config not found")
69}
70
71pub(crate) fn missing_feature() -> DevCycleError {
72 DevCycleError::new("Feature not found")
73}
74
75pub(crate) fn missing_variable_for_variation() -> DevCycleError {
76 DevCycleError::new("Variable not found for variation")
77}
78
79pub(crate) fn invalid_variable_type() -> DevCycleError {
80 DevCycleError::new("Invalid variable type")
81}
82
83pub(crate) fn variable_type_mismatch() -> DevCycleError {
84 DevCycleError::new("Variable type mismatch")
85}
86
87pub fn failed_to_set_client_custom_data() -> DevCycleError {
88 DevCycleError::new("Failed to set client custom data")
89}
90
91pub fn parse_error(msg: String) -> DevCycleError {
92 DevCycleError::new(&format!("Parse error: {}", msg))
93}
94
95pub fn missing_field(field: String) -> DevCycleError {
96 DevCycleError::new(&format!("Missing required field: {}", field))
97}
98
99pub(crate) fn bucket_result_error_to_default_reason(err: &DevCycleError) -> DefaultReason {
100 match err.details.as_str() {
101 "Missing config" => DefaultReason::MissingConfig,
102 "Missing variable" => DefaultReason::MissingVariable,
103 "Missing feature" => DefaultReason::MissingFeature,
104 "Missing variation" => DefaultReason::MissingVariation,
105 "Missing variable for variation" => DefaultReason::MissingVariableForVariation,
106 "User does not qualify for rollouts" => DefaultReason::UserNotInRollout,
107 "User does not qualify for targets" => DefaultReason::UserNotTargeted,
108 "Invalid variable type" => DefaultReason::InvalidVariableType,
109 "Variable type mismatch" => DefaultReason::VariableTypeMismatch,
110 "" => DefaultReason::NotDefaulted,
111 _ => DefaultReason::Unknown,
112 }
113}
114
115pub(crate) fn event_queue_not_initialized() -> DevCycleError {
116 return DevCycleError::new("Event queue not initialized");
117}