firebase_rs_sdk/messaging/
error.rs1use 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 AvailableInServiceWorker,
11 UnsupportedBrowser,
12 FailedDefaultRegistration,
13 InvalidServiceWorkerRegistration,
14 TokenSubscribeFailed,
15 TokenUnsubscribeFailed,
16 TokenSubscribeNoToken,
17 TokenUpdateFailed,
18 TokenUpdateNoToken,
19}
20
21impl MessagingErrorCode {
22 pub fn as_str(&self) -> &'static str {
23 match self {
24 MessagingErrorCode::TokenDeletionFailed => "messaging/token-deletion-failed",
25 MessagingErrorCode::InvalidArgument => "messaging/invalid-argument",
26 MessagingErrorCode::Internal => "messaging/internal",
27 MessagingErrorCode::PermissionBlocked => "messaging/permission-blocked",
28 MessagingErrorCode::AvailableInWindow => "messaging/available-in-window",
29 MessagingErrorCode::AvailableInServiceWorker => "messaging/available-in-sw",
30 MessagingErrorCode::UnsupportedBrowser => "messaging/unsupported-browser",
31 MessagingErrorCode::FailedDefaultRegistration => {
32 "messaging/failed-service-worker-registration"
33 }
34 MessagingErrorCode::InvalidServiceWorkerRegistration => {
35 "messaging/invalid-sw-registration"
36 }
37 MessagingErrorCode::TokenSubscribeFailed => "messaging/token-subscribe-failed",
38 MessagingErrorCode::TokenUnsubscribeFailed => "messaging/token-unsubscribe-failed",
39 MessagingErrorCode::TokenSubscribeNoToken => "messaging/token-subscribe-no-token",
40 MessagingErrorCode::TokenUpdateFailed => "messaging/token-update-failed",
41 MessagingErrorCode::TokenUpdateNoToken => "messaging/token-update-no-token",
42 }
43 }
44}
45
46#[derive(Clone, Debug)]
47pub struct MessagingError {
48 pub code: MessagingErrorCode,
49 message: String,
50}
51
52impl MessagingError {
53 pub fn new(code: MessagingErrorCode, message: impl Into<String>) -> Self {
54 Self {
55 code,
56 message: message.into(),
57 }
58 }
59
60 pub fn code_str(&self) -> &'static str {
61 self.code.as_str()
62 }
63}
64
65impl Display for MessagingError {
66 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
67 write!(f, "{} ({})", self.message, self.code_str())
68 }
69}
70
71impl std::error::Error for MessagingError {}
72
73pub type MessagingResult<T> = Result<T, MessagingError>;
74
75pub fn invalid_argument(message: impl Into<String>) -> MessagingError {
76 MessagingError::new(MessagingErrorCode::InvalidArgument, message)
77}
78
79pub fn internal_error(message: impl Into<String>) -> MessagingError {
80 MessagingError::new(MessagingErrorCode::Internal, message)
81}
82
83pub fn token_deletion_failed(message: impl Into<String>) -> MessagingError {
84 MessagingError::new(MessagingErrorCode::TokenDeletionFailed, message)
85}
86
87pub fn permission_blocked(message: impl Into<String>) -> MessagingError {
88 MessagingError::new(MessagingErrorCode::PermissionBlocked, message)
89}
90
91pub fn available_in_window(message: impl Into<String>) -> MessagingError {
92 MessagingError::new(MessagingErrorCode::AvailableInWindow, message)
93}
94
95pub fn available_in_service_worker(message: impl Into<String>) -> MessagingError {
96 MessagingError::new(MessagingErrorCode::AvailableInServiceWorker, message)
97}
98
99pub fn unsupported_browser(message: impl Into<String>) -> MessagingError {
100 MessagingError::new(MessagingErrorCode::UnsupportedBrowser, message)
101}
102
103pub fn failed_default_registration(message: impl Into<String>) -> MessagingError {
104 MessagingError::new(MessagingErrorCode::FailedDefaultRegistration, message)
105}
106
107pub fn invalid_service_worker_registration(message: impl Into<String>) -> MessagingError {
108 MessagingError::new(
109 MessagingErrorCode::InvalidServiceWorkerRegistration,
110 message,
111 )
112}
113
114pub fn token_subscribe_failed(message: impl Into<String>) -> MessagingError {
115 MessagingError::new(MessagingErrorCode::TokenSubscribeFailed, message)
116}
117
118pub fn token_unsubscribe_failed(message: impl Into<String>) -> MessagingError {
119 MessagingError::new(MessagingErrorCode::TokenUnsubscribeFailed, message)
120}
121
122pub fn token_subscribe_no_token() -> MessagingError {
123 MessagingError::new(
124 MessagingErrorCode::TokenSubscribeNoToken,
125 "FCM returned no token when subscribing the user to push.",
126 )
127}
128
129pub fn token_update_failed(message: impl Into<String>) -> MessagingError {
130 MessagingError::new(MessagingErrorCode::TokenUpdateFailed, message)
131}
132
133pub fn token_update_no_token() -> MessagingError {
134 MessagingError::new(
135 MessagingErrorCode::TokenUpdateNoToken,
136 "FCM returned no token when updating the user to push.",
137 )
138}