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