firebase_rs_sdk/analytics/
error.rs

1use std::fmt::{Display, Formatter};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub enum AnalyticsErrorCode {
5    InvalidArgument,
6    Internal,
7    Network,
8    ConfigFetchFailed,
9    MissingMeasurementId,
10}
11
12impl AnalyticsErrorCode {
13    pub fn as_str(&self) -> &'static str {
14        match self {
15            AnalyticsErrorCode::InvalidArgument => "analytics/invalid-argument",
16            AnalyticsErrorCode::Internal => "analytics/internal",
17            AnalyticsErrorCode::Network => "analytics/network",
18            AnalyticsErrorCode::ConfigFetchFailed => "analytics/config-fetch-failed",
19            AnalyticsErrorCode::MissingMeasurementId => "analytics/missing-measurement-id",
20        }
21    }
22}
23
24#[derive(Clone, Debug)]
25pub struct AnalyticsError {
26    pub code: AnalyticsErrorCode,
27    message: String,
28}
29
30impl AnalyticsError {
31    pub fn new(code: AnalyticsErrorCode, message: impl Into<String>) -> Self {
32        Self {
33            code,
34            message: message.into(),
35        }
36    }
37
38    pub fn code_str(&self) -> &'static str {
39        self.code.as_str()
40    }
41}
42
43impl Display for AnalyticsError {
44    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
45        write!(f, "{} ({})", self.message, self.code_str())
46    }
47}
48
49impl std::error::Error for AnalyticsError {}
50
51pub type AnalyticsResult<T> = Result<T, AnalyticsError>;
52
53pub fn invalid_argument(message: impl Into<String>) -> AnalyticsError {
54    AnalyticsError::new(AnalyticsErrorCode::InvalidArgument, message)
55}
56
57pub fn internal_error(message: impl Into<String>) -> AnalyticsError {
58    AnalyticsError::new(AnalyticsErrorCode::Internal, message)
59}
60
61pub fn network_error(message: impl Into<String>) -> AnalyticsError {
62    AnalyticsError::new(AnalyticsErrorCode::Network, message)
63}
64
65pub fn config_fetch_failed(message: impl Into<String>) -> AnalyticsError {
66    AnalyticsError::new(AnalyticsErrorCode::ConfigFetchFailed, message)
67}
68
69pub fn missing_measurement_id(message: impl Into<String>) -> AnalyticsError {
70    AnalyticsError::new(AnalyticsErrorCode::MissingMeasurementId, message)
71}