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