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