Skip to main content

statsig_rust/
statsig_err.rs

1use crate::networking::network_error::NetworkError;
2use serde::Serialize;
3use std::fmt::{Display, Formatter};
4
5#[derive(Debug, Clone, Serialize)]
6pub enum StatsigErr {
7    // Custom
8    CustomError(String),
9
10    // System / Concurrency
11    LockFailure(String),
12    ThreadFailure(String),
13    StackOverflowError,
14    SharedInstanceFailure(String),
15    ObservabilityClientFailure(String),
16
17    // Adapter
18    UnstartedAdapter(String),
19    IdListsAdapterFailedToInsertIdList,
20    SpecsAdapterSkipPoll(String),
21    DataStoreFailure(String),
22
23    // Network
24    NetworkError(NetworkError),
25    GrpcError(String),
26
27    // Data Format / Serialization / Parsing
28    SerializationError(String),
29    JsonParseError(String, String),
30    ProtobufParseError(String, String),
31
32    // Compression
33    ZstdDictCompressionError(String),
34    GzipError(String),
35    ZstdError(String),
36
37    // Filesystem
38    FileError(String),
39
40    // Logging
41    LogEventError(String),
42
43    // Evaluation
44    EvaluationError(String),
45
46    // Initialization / Shutdown
47    InitializationError(String),
48    ShutdownFailure(String),
49    InvalidOperation(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) => write!(f, "NetworkError|{error}"),
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            StatsigErr::ProtobufParseError(type_name, err_msg) => {
91                write!(f, "Failed to parse {type_name} - {err_msg}")
92            }
93
94            StatsigErr::ZstdDictCompressionError(msg) => {
95                write!(f, "Zstd dictionary compression error: {msg}")
96            }
97            StatsigErr::GzipError(msg) => write!(f, "Gzip error: {msg}"),
98            StatsigErr::ZstdError(msg) => write!(f, "Zstd error: {msg}"),
99
100            StatsigErr::FileError(msg) => write!(f, "File write error: {msg}"),
101
102            StatsigErr::LogEventError(msg) => write!(f, "Log event error: {msg}"),
103
104            StatsigErr::EvaluationError(message) => {
105                write!(f, "Evaluation Error: {message}")
106            }
107
108            StatsigErr::InitializationError(message) => {
109                write!(f, "Initialization Error: {message}")
110            }
111            StatsigErr::ShutdownFailure(e) => write!(f, "Shutdown failure: {e}"),
112            StatsigErr::InvalidOperation(e) => write!(f, "Invalid operation: {e}"),
113
114            StatsigErr::ScheduleFailure(e) => write!(f, "Failed to schedule task: {e}"),
115            StatsigErr::TaskShutdownFailure => write!(f, "Failed to shutdown task scheduler"),
116            StatsigErr::GCIRError(e) => write!(f, "Error Getting Client Initialize Response: {e}"),
117        }
118    }
119}
120
121impl StatsigErr {
122    pub fn name(&self) -> &'static str {
123        match self {
124            StatsigErr::CustomError(_) => "CustomError",
125
126            StatsigErr::LockFailure(_) => "LockFailure",
127            StatsigErr::ThreadFailure(_) => "ThreadFailure",
128            StatsigErr::StackOverflowError => "StackOverflowError",
129            StatsigErr::SharedInstanceFailure(_) => "SharedInstanceFailure",
130            StatsigErr::ObservabilityClientFailure(_) => "ObservabilityClientFailure",
131
132            StatsigErr::UnstartedAdapter(_) => "UnstartedAdapter",
133            StatsigErr::IdListsAdapterFailedToInsertIdList => "IdListsAdapterFailedToInsertIdList",
134            StatsigErr::SpecsAdapterSkipPoll(_) => "SpecsAdapterSkipPoll",
135            StatsigErr::DataStoreFailure(_) => "DataStoreFailure",
136
137            StatsigErr::NetworkError(e) => e.name(),
138            StatsigErr::GrpcError(_) => "GrpcError",
139
140            StatsigErr::SerializationError(_) => "SerializationError",
141            StatsigErr::JsonParseError(_, _) => "JsonParseError",
142            StatsigErr::ProtobufParseError(_, _) => "ProtobufParseError",
143
144            StatsigErr::ZstdDictCompressionError(_) => "ZstdDictCompressionError",
145            StatsigErr::GzipError(_) => "GzipError",
146            StatsigErr::ZstdError(_) => "ZstdError",
147
148            StatsigErr::FileError(_) => "FileError",
149
150            StatsigErr::LogEventError(_) => "LogEventError",
151
152            StatsigErr::EvaluationError(_) => "EvaluationError",
153
154            StatsigErr::InitializationError(_) => "InitializationError",
155            StatsigErr::ShutdownFailure(_) => "ShutdownFailure",
156            StatsigErr::InvalidOperation(_) => "InvalidOperation",
157
158            StatsigErr::ScheduleFailure(_) => "ScheduleFailure",
159            StatsigErr::TaskShutdownFailure => "TaskShutdownFailure",
160            StatsigErr::GCIRError(_) => "GCIRError",
161        }
162    }
163}