firebase_rs_sdk/messaging/
error.rs

1use std::fmt::{Display, Formatter};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub enum MessagingErrorCode {
5    TokenDeletionFailed,
6    InvalidArgument,
7    Internal,
8    PermissionBlocked,
9    AvailableInWindow,
10    UnsupportedBrowser,
11    FailedDefaultRegistration,
12    InvalidServiceWorkerRegistration,
13    TokenSubscribeFailed,
14    TokenUnsubscribeFailed,
15}
16
17impl MessagingErrorCode {
18    pub fn as_str(&self) -> &'static str {
19        match self {
20            MessagingErrorCode::TokenDeletionFailed => "messaging/token-deletion-failed",
21            MessagingErrorCode::InvalidArgument => "messaging/invalid-argument",
22            MessagingErrorCode::Internal => "messaging/internal",
23            MessagingErrorCode::PermissionBlocked => "messaging/permission-blocked",
24            MessagingErrorCode::AvailableInWindow => "messaging/available-in-window",
25            MessagingErrorCode::UnsupportedBrowser => "messaging/unsupported-browser",
26            MessagingErrorCode::FailedDefaultRegistration => {
27                "messaging/failed-service-worker-registration"
28            }
29            MessagingErrorCode::InvalidServiceWorkerRegistration => {
30                "messaging/invalid-sw-registration"
31            }
32            MessagingErrorCode::TokenSubscribeFailed => "messaging/token-subscribe-failed",
33            MessagingErrorCode::TokenUnsubscribeFailed => "messaging/token-unsubscribe-failed",
34        }
35    }
36}
37
38#[derive(Clone, Debug)]
39pub struct MessagingError {
40    pub code: MessagingErrorCode,
41    message: String,
42}
43
44impl MessagingError {
45    pub fn new(code: MessagingErrorCode, message: impl Into<String>) -> Self {
46        Self {
47            code,
48            message: message.into(),
49        }
50    }
51
52    pub fn code_str(&self) -> &'static str {
53        self.code.as_str()
54    }
55}
56
57impl Display for MessagingError {
58    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
59        write!(f, "{} ({})", self.message, self.code_str())
60    }
61}
62
63impl std::error::Error for MessagingError {}
64
65pub type MessagingResult<T> = Result<T, MessagingError>;
66
67pub fn invalid_argument(message: impl Into<String>) -> MessagingError {
68    MessagingError::new(MessagingErrorCode::InvalidArgument, message)
69}
70
71pub fn internal_error(message: impl Into<String>) -> MessagingError {
72    MessagingError::new(MessagingErrorCode::Internal, message)
73}
74
75pub fn token_deletion_failed(message: impl Into<String>) -> MessagingError {
76    MessagingError::new(MessagingErrorCode::TokenDeletionFailed, message)
77}
78
79pub fn permission_blocked(message: impl Into<String>) -> MessagingError {
80    MessagingError::new(MessagingErrorCode::PermissionBlocked, message)
81}
82
83pub fn available_in_window(message: impl Into<String>) -> MessagingError {
84    MessagingError::new(MessagingErrorCode::AvailableInWindow, message)
85}
86
87pub fn unsupported_browser(message: impl Into<String>) -> MessagingError {
88    MessagingError::new(MessagingErrorCode::UnsupportedBrowser, message)
89}
90
91pub fn failed_default_registration(message: impl Into<String>) -> MessagingError {
92    MessagingError::new(MessagingErrorCode::FailedDefaultRegistration, message)
93}
94
95pub fn invalid_service_worker_registration(message: impl Into<String>) -> MessagingError {
96    MessagingError::new(
97        MessagingErrorCode::InvalidServiceWorkerRegistration,
98        message,
99    )
100}
101
102pub fn token_subscribe_failed(message: impl Into<String>) -> MessagingError {
103    MessagingError::new(MessagingErrorCode::TokenSubscribeFailed, message)
104}
105
106pub fn token_unsubscribe_failed(message: impl Into<String>) -> MessagingError {
107    MessagingError::new(MessagingErrorCode::TokenUnsubscribeFailed, message)
108}