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