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 ChecksumFailure(String),
32
33 ZstdDictCompressionError(String),
35 GzipError(String),
36 ZstdError(String),
37
38 FileError(String),
40
41 LogEventError(String),
43
44 EvaluationError(String),
46
47 InitializationError(String),
49 ShutdownFailure(String),
50 InvalidOperation(String),
51
52 ScheduleFailure(String),
54 TaskShutdownFailure,
55
56 GCIRError(String),
58}
59
60impl Display for StatsigErr {
61 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
62 match self {
63 StatsigErr::CustomError(msg) => write!(f, "{msg}"),
64
65 StatsigErr::LockFailure(msg) => write!(f, "Failed to acquire lock: {msg}"),
66 StatsigErr::ThreadFailure(msg) => write!(f, "Thread failure: {msg}"),
67 StatsigErr::StackOverflowError => write!(f, "Statsig Evaluation Depth Exceeded"),
68 StatsigErr::SharedInstanceFailure(message) => {
69 write!(f, "SharedInstance Error: {message}")
70 }
71 StatsigErr::ObservabilityClientFailure(message) => {
72 write!(f, "ObservabilityClient Error: {message}")
73 }
74
75 StatsigErr::UnstartedAdapter(msg) => write!(f, "Adapter not started: {msg}"),
76 StatsigErr::IdListsAdapterFailedToInsertIdList => {
77 write!(f, "Failed to insert new Id List")
78 }
79 StatsigErr::SpecsAdapterSkipPoll(adapter_name) => {
80 write!(f, "{adapter_name} skips scheduling polling")
81 }
82 StatsigErr::DataStoreFailure(message) => write!(f, "DataStore Error: {message}"),
83
84 StatsigErr::NetworkError(error) => write!(f, "NetworkError|{error}"),
85 StatsigErr::GrpcError(e) => write!(f, "gRPC failure: {e}"),
86
87 StatsigErr::SerializationError(msg) => write!(f, "Serialization error: {msg}"),
88 StatsigErr::JsonParseError(type_name, err_msg) => {
89 write!(f, "Failed to parse JSON {type_name} - {err_msg}")
90 }
91 StatsigErr::ProtobufParseError(type_name, err_msg) => {
92 write!(f, "Failed to parse Protobuf {type_name} - {err_msg}")
93 }
94 StatsigErr::ChecksumFailure(msg) => write!(f, "Checksum failure: {msg}"),
95
96 StatsigErr::ZstdDictCompressionError(msg) => {
97 write!(f, "Zstd dictionary compression error: {msg}")
98 }
99 StatsigErr::GzipError(msg) => write!(f, "Gzip error: {msg}"),
100 StatsigErr::ZstdError(msg) => write!(f, "Zstd error: {msg}"),
101
102 StatsigErr::FileError(msg) => write!(f, "File write error: {msg}"),
103
104 StatsigErr::LogEventError(msg) => write!(f, "Log event error: {msg}"),
105
106 StatsigErr::EvaluationError(message) => {
107 write!(f, "Evaluation Error: {message}")
108 }
109
110 StatsigErr::InitializationError(message) => {
111 write!(f, "Initialization Error: {message}")
112 }
113 StatsigErr::ShutdownFailure(e) => write!(f, "Shutdown failure: {e}"),
114 StatsigErr::InvalidOperation(e) => write!(f, "Invalid operation: {e}"),
115
116 StatsigErr::ScheduleFailure(e) => write!(f, "Failed to schedule task: {e}"),
117 StatsigErr::TaskShutdownFailure => write!(f, "Failed to shutdown task scheduler"),
118 StatsigErr::GCIRError(e) => write!(f, "Error Getting Client Initialize Response: {e}"),
119 }
120 }
121}
122
123impl StatsigErr {
124 pub fn name(&self) -> &'static str {
125 match self {
126 StatsigErr::CustomError(_) => "CustomError",
127
128 StatsigErr::LockFailure(_) => "LockFailure",
129 StatsigErr::ThreadFailure(_) => "ThreadFailure",
130 StatsigErr::StackOverflowError => "StackOverflowError",
131 StatsigErr::SharedInstanceFailure(_) => "SharedInstanceFailure",
132 StatsigErr::ObservabilityClientFailure(_) => "ObservabilityClientFailure",
133
134 StatsigErr::UnstartedAdapter(_) => "UnstartedAdapter",
135 StatsigErr::IdListsAdapterFailedToInsertIdList => "IdListsAdapterFailedToInsertIdList",
136 StatsigErr::SpecsAdapterSkipPoll(_) => "SpecsAdapterSkipPoll",
137 StatsigErr::DataStoreFailure(_) => "DataStoreFailure",
138
139 StatsigErr::NetworkError(e) => e.name(),
140 StatsigErr::GrpcError(_) => "GrpcError",
141
142 StatsigErr::SerializationError(_) => "SerializationError",
143 StatsigErr::JsonParseError(_, _) => "JsonParseError",
144 StatsigErr::ProtobufParseError(_, _) => "ProtobufParseError",
145 StatsigErr::ChecksumFailure(_) => "ChecksumFailure",
146
147 StatsigErr::ZstdDictCompressionError(_) => "ZstdDictCompressionError",
148 StatsigErr::GzipError(_) => "GzipError",
149 StatsigErr::ZstdError(_) => "ZstdError",
150
151 StatsigErr::FileError(_) => "FileError",
152
153 StatsigErr::LogEventError(_) => "LogEventError",
154
155 StatsigErr::EvaluationError(_) => "EvaluationError",
156
157 StatsigErr::InitializationError(_) => "InitializationError",
158 StatsigErr::ShutdownFailure(_) => "ShutdownFailure",
159 StatsigErr::InvalidOperation(_) => "InvalidOperation",
160
161 StatsigErr::ScheduleFailure(_) => "ScheduleFailure",
162 StatsigErr::TaskShutdownFailure => "TaskShutdownFailure",
163 StatsigErr::GCIRError(_) => "GCIRError",
164 }
165 }
166}