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 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}