firebase_rs_sdk/analytics/
error.rs1use 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}