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