1use crate::networking::network_error::NetworkError;
2use serde::Serialize;
3use std::fmt::{Display, Formatter};
4
5#[derive(Debug, Clone, Serialize)]
6pub enum StatsigErr {
7 CustomError(String),
9
10 LockFailure(String),
12 ThreadFailure(String),
13 StackOverflowError,
14 SharedInstanceFailure(String),
15 ObservabilityClientFailure(String),
16
17 UnstartedAdapter(String),
19 IdListsAdapterFailedToInsertIdList,
20 SpecsAdapterSkipPoll(String),
21 DataStoreFailure(String),
22
23 NetworkError(NetworkError),
25 GrpcError(String),
26
27 SerializationError(String),
29 JsonParseError(String, String),
30 ProtobufParseError(String, String),
31
32 ZstdDictCompressionError(String),
34 GzipError(String),
35 ZstdError(String),
36
37 FileError(String),
39
40 LogEventError(String),
42
43 EvaluationError(String),
45
46 InitializationError(String),
48 ShutdownFailure(String),
49 InvalidOperation(String),
50
51 ScheduleFailure(String),
53 TaskShutdownFailure,
54
55 GCIRError(String),
57}
58
59impl Display for StatsigErr {
60 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
61 match self {
62 StatsigErr::CustomError(msg) => write!(f, "{msg}"),
63
64 StatsigErr::LockFailure(msg) => write!(f, "Failed to acquire lock: {msg}"),
65 StatsigErr::ThreadFailure(msg) => write!(f, "Thread failure: {msg}"),
66 StatsigErr::StackOverflowError => write!(f, "Statsig Evaluation Depth Exceeded"),
67 StatsigErr::SharedInstanceFailure(message) => {
68 write!(f, "SharedInstance Error: {message}")
69 }
70 StatsigErr::ObservabilityClientFailure(message) => {
71 write!(f, "ObservabilityClient Error: {message}")
72 }
73
74 StatsigErr::UnstartedAdapter(msg) => write!(f, "Adapter not started: {msg}"),
75 StatsigErr::IdListsAdapterFailedToInsertIdList => {
76 write!(f, "Failed to insert new Id List")
77 }
78 StatsigErr::SpecsAdapterSkipPoll(adapter_name) => {
79 write!(f, "{adapter_name} skips scheduling polling")
80 }
81 StatsigErr::DataStoreFailure(message) => write!(f, "DataStore Error: {message}"),
82
83 StatsigErr::NetworkError(error) => write!(f, "NetworkError|{error}"),
84 StatsigErr::GrpcError(e) => write!(f, "{e}"),
85
86 StatsigErr::SerializationError(msg) => write!(f, "Serialization error: {msg}"),
87 StatsigErr::JsonParseError(type_name, err_msg) => {
88 write!(f, "Failed to parse {type_name} - {err_msg}")
89 }
90 StatsigErr::ProtobufParseError(type_name, err_msg) => {
91 write!(f, "Failed to parse {type_name} - {err_msg}")
92 }
93
94 StatsigErr::ZstdDictCompressionError(msg) => {
95 write!(f, "Zstd dictionary compression error: {msg}")
96 }
97 StatsigErr::GzipError(msg) => write!(f, "Gzip error: {msg}"),
98 StatsigErr::ZstdError(msg) => write!(f, "Zstd error: {msg}"),
99
100 StatsigErr::FileError(msg) => write!(f, "File write error: {msg}"),
101
102 StatsigErr::LogEventError(msg) => write!(f, "Log event error: {msg}"),
103
104 StatsigErr::EvaluationError(message) => {
105 write!(f, "Evaluation Error: {message}")
106 }
107
108 StatsigErr::InitializationError(message) => {
109 write!(f, "Initialization Error: {message}")
110 }
111 StatsigErr::ShutdownFailure(e) => write!(f, "Shutdown failure: {e}"),
112 StatsigErr::InvalidOperation(e) => write!(f, "Invalid operation: {e}"),
113
114 StatsigErr::ScheduleFailure(e) => write!(f, "Failed to schedule task: {e}"),
115 StatsigErr::TaskShutdownFailure => write!(f, "Failed to shutdown task scheduler"),
116 StatsigErr::GCIRError(e) => write!(f, "Error Getting Client Initialize Response: {e}"),
117 }
118 }
119}
120
121impl StatsigErr {
122 pub fn name(&self) -> &'static str {
123 match self {
124 StatsigErr::CustomError(_) => "CustomError",
125
126 StatsigErr::LockFailure(_) => "LockFailure",
127 StatsigErr::ThreadFailure(_) => "ThreadFailure",
128 StatsigErr::StackOverflowError => "StackOverflowError",
129 StatsigErr::SharedInstanceFailure(_) => "SharedInstanceFailure",
130 StatsigErr::ObservabilityClientFailure(_) => "ObservabilityClientFailure",
131
132 StatsigErr::UnstartedAdapter(_) => "UnstartedAdapter",
133 StatsigErr::IdListsAdapterFailedToInsertIdList => "IdListsAdapterFailedToInsertIdList",
134 StatsigErr::SpecsAdapterSkipPoll(_) => "SpecsAdapterSkipPoll",
135 StatsigErr::DataStoreFailure(_) => "DataStoreFailure",
136
137 StatsigErr::NetworkError(e) => e.name(),
138 StatsigErr::GrpcError(_) => "GrpcError",
139
140 StatsigErr::SerializationError(_) => "SerializationError",
141 StatsigErr::JsonParseError(_, _) => "JsonParseError",
142 StatsigErr::ProtobufParseError(_, _) => "ProtobufParseError",
143
144 StatsigErr::ZstdDictCompressionError(_) => "ZstdDictCompressionError",
145 StatsigErr::GzipError(_) => "GzipError",
146 StatsigErr::ZstdError(_) => "ZstdError",
147
148 StatsigErr::FileError(_) => "FileError",
149
150 StatsigErr::LogEventError(_) => "LogEventError",
151
152 StatsigErr::EvaluationError(_) => "EvaluationError",
153
154 StatsigErr::InitializationError(_) => "InitializationError",
155 StatsigErr::ShutdownFailure(_) => "ShutdownFailure",
156 StatsigErr::InvalidOperation(_) => "InvalidOperation",
157
158 StatsigErr::ScheduleFailure(_) => "ScheduleFailure",
159 StatsigErr::TaskShutdownFailure => "TaskShutdownFailure",
160 StatsigErr::GCIRError(_) => "GCIRError",
161 }
162 }
163}