statsig_rust/
statsig_err.rs

1use std::fmt::{Display, Formatter};
2
3use crate::networking::NetworkError;
4
5#[derive(Debug, Clone)]
6pub enum StatsigErr {
7    CustomError(String),
8
9    LockFailure(String),
10
11    UnstartedAdapter(String),
12
13    NetworkError(NetworkError, Option<String>),
14
15    SerializationError(String),
16
17    ZstdDictCompressionError(String),
18
19    GzipError(String),
20
21    ZstdError(String),
22
23    JsonParseError(String, String),
24
25    FileError(String),
26
27    ThreadFailure(String),
28
29    StackOverflowError,
30
31    // DataStore
32    DataStoreFailure(String),
33
34    // Skip poll
35    SpecsAdapterSkipPoll(String),
36
37    ObservabilityClientFailure(String),
38
39    // ID Lists Adapter
40    IdListsAdapterFailedToInsertIdList,
41
42    GrpcError(String),
43
44    ShutdownTimeout,
45
46    // Task Scheduler
47    ScheduleFailure(String),
48    ShutdownFailure,
49
50    SharedInstanceFailure(String),
51
52    // Generic initialization error until init detail is exposed
53    InitializationError(String),
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
63            StatsigErr::UnstartedAdapter(msg) => write!(f, "Adapter not started: {msg}"),
64
65            StatsigErr::NetworkError(error, msg) => write!(f, "Network error {error}: {msg:?}"),
66
67            StatsigErr::SerializationError(msg) => write!(f, "Serialization error: {msg}"),
68
69            StatsigErr::ZstdDictCompressionError(msg) => {
70                write!(f, "Zstd dictionary compression error: {msg}")
71            }
72
73            StatsigErr::GzipError(msg) => write!(f, "Gzip error: {msg}"),
74
75            StatsigErr::ZstdError(msg) => write!(f, "Zstd error: {msg}"),
76
77            StatsigErr::JsonParseError(type_name, err_msg) => {
78                write!(f, "Failed to parse {type_name} - {err_msg}")
79            }
80
81            StatsigErr::FileError(msg) => write!(f, "File write error: {msg}"),
82
83            StatsigErr::ThreadFailure(msg) => write!(f, "Thread failure: {msg}"),
84
85            StatsigErr::StackOverflowError => write!(f, "Statsig Evaluation Depth Exceeded"),
86
87            // ID Lists
88            StatsigErr::IdListsAdapterFailedToInsertIdList => {
89                write!(f, "Failed to insert new Id List")
90            }
91
92            StatsigErr::GrpcError(e) => write!(f, "{e}"),
93
94            StatsigErr::ShutdownTimeout => write!(f, "Shutdown timed out"),
95
96            StatsigErr::ScheduleFailure(e) => write!(f, "Failed to schedule task: {e}"),
97
98            StatsigErr::ShutdownFailure => write!(f, "Failed to shutdown task scheduler"),
99            StatsigErr::DataStoreFailure(message) => write!(f, "DataStore Error: {message}"),
100            StatsigErr::SpecsAdapterSkipPoll(adapter_name) => {
101                write!(f, "{adapter_name} skips scheduling polling")
102            }
103            StatsigErr::ObservabilityClientFailure(message) => {
104                write!(f, "ObservabilityClient Error: {message}")
105            }
106            StatsigErr::SharedInstanceFailure(message) => {
107                write!(f, "SharedInstance Error: {message}")
108            }
109            StatsigErr::InitializationError(message) => {
110                write!(f, "Initialization Error: {message}")
111            }
112        }
113    }
114}