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