statsig_rust/
statsig_err.rs

1use std::fmt::{Display, Formatter};
2
3use serde::Serialize;
4
5use crate::networking::NetworkError;
6
7#[derive(Debug, Clone, Serialize)]
8pub enum StatsigErr {
9    // Custom
10    CustomError(String),
11
12    // System / Concurrency
13    LockFailure(String),
14    ThreadFailure(String),
15    StackOverflowError,
16    SharedInstanceFailure(String),
17    ObservabilityClientFailure(String),
18
19    // Adapter
20    UnstartedAdapter(String),
21    IdListsAdapterFailedToInsertIdList,
22    SpecsAdapterSkipPoll(String),
23    DataStoreFailure(String),
24
25    // Network
26    NetworkError(NetworkError, Option<String>),
27    GrpcError(String),
28
29    // Data Format / Serialization / Parsing
30    SerializationError(String),
31    JsonParseError(String, String),
32
33    // Compression
34    ZstdDictCompressionError(String),
35    GzipError(String),
36    ZstdError(String),
37
38    // Filesystem
39    FileError(String),
40
41    // Logging
42    LogEventError(String),
43
44    // Evaluation
45    EvaluationError(String),
46
47    // Initialization / Shutdown
48    InitializationError(String),
49    ShutdownFailure(String),
50
51    // Task Scheduler
52    ScheduleFailure(String),
53    TaskShutdownFailure,
54
55    // GCIR Errors
56    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}