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