1use std::fmt::{Display, Formatter};
2
3use serde::Serialize;
4
5use crate::networking::NetworkError;
6
7#[derive(Debug, Clone, Serialize)]
8pub enum StatsigErr {
9 CustomError(String),
11
12 LockFailure(String),
14 ThreadFailure(String),
15 StackOverflowError,
16 SharedInstanceFailure(String),
17 ObservabilityClientFailure(String),
18
19 UnstartedAdapter(String),
21 IdListsAdapterFailedToInsertIdList,
22 SpecsAdapterSkipPoll(String),
23 DataStoreFailure(String),
24
25 NetworkError(NetworkError, Option<String>),
27 GrpcError(String),
28
29 SerializationError(String),
31 JsonParseError(String, 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
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, msg) => write!(f, "Network error {error}: {msg:?}"),
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
91 StatsigErr::ZstdDictCompressionError(msg) => {
92 write!(f, "Zstd dictionary compression error: {msg}")
93 }
94 StatsigErr::GzipError(msg) => write!(f, "Gzip error: {msg}"),
95 StatsigErr::ZstdError(msg) => write!(f, "Zstd error: {msg}"),
96
97 StatsigErr::FileError(msg) => write!(f, "File write error: {msg}"),
98
99 StatsigErr::LogEventError(msg) => write!(f, "Log event error: {msg}"),
100
101 StatsigErr::EvaluationError(message) => {
102 write!(f, "Evaluation Error: {message}")
103 }
104
105 StatsigErr::InitializationError(message) => {
106 write!(f, "Initialization Error: {message}")
107 }
108 StatsigErr::ShutdownFailure(e) => write!(f, "Shutdown failure: {e}"),
109
110 StatsigErr::ScheduleFailure(e) => write!(f, "Failed to schedule task: {e}"),
111 StatsigErr::TaskShutdownFailure => write!(f, "Failed to shutdown task scheduler"),
112 StatsigErr::GCIRError(e) => write!(f, "Error Getting Client Initialize Response: {e}"),
113 }
114 }
115}
116
117impl StatsigErr {
118 pub fn name(&self) -> &'static str {
119 match self {
120 StatsigErr::CustomError(_) => "CustomError",
121
122 StatsigErr::LockFailure(_) => "LockFailure",
123 StatsigErr::ThreadFailure(_) => "ThreadFailure",
124 StatsigErr::StackOverflowError => "StackOverflowError",
125 StatsigErr::SharedInstanceFailure(_) => "SharedInstanceFailure",
126 StatsigErr::ObservabilityClientFailure(_) => "ObservabilityClientFailure",
127
128 StatsigErr::UnstartedAdapter(_) => "UnstartedAdapter",
129 StatsigErr::IdListsAdapterFailedToInsertIdList => "IdListsAdapterFailedToInsertIdList",
130 StatsigErr::SpecsAdapterSkipPoll(_) => "SpecsAdapterSkipPoll",
131 StatsigErr::DataStoreFailure(_) => "DataStoreFailure",
132
133 StatsigErr::NetworkError(_, _) => "NetworkError",
134 StatsigErr::GrpcError(_) => "GrpcError",
135
136 StatsigErr::SerializationError(_) => "SerializationError",
137 StatsigErr::JsonParseError(_, _) => "JsonParseError",
138
139 StatsigErr::ZstdDictCompressionError(_) => "ZstdDictCompressionError",
140 StatsigErr::GzipError(_) => "GzipError",
141 StatsigErr::ZstdError(_) => "ZstdError",
142
143 StatsigErr::FileError(_) => "FileError",
144
145 StatsigErr::LogEventError(_) => "LogEventError",
146
147 StatsigErr::EvaluationError(_) => "EvaluationError",
148
149 StatsigErr::InitializationError(_) => "InitializationError",
150 StatsigErr::ShutdownFailure(_) => "ShutdownFailure",
151
152 StatsigErr::ScheduleFailure(_) => "ScheduleFailure",
153 StatsigErr::TaskShutdownFailure => "TaskShutdownFailure",
154 StatsigErr::GCIRError(_) => "GCIRError",
155 }
156 }
157}