firebase_rs_sdk/database/
error.rs

1use std::fmt::{Display, Formatter};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub enum DatabaseErrorCode {
5    InvalidArgument,
6    Internal,
7    PermissionDenied,
8}
9
10impl DatabaseErrorCode {
11    pub fn as_str(&self) -> &'static str {
12        match self {
13            DatabaseErrorCode::InvalidArgument => "database/invalid-argument",
14            DatabaseErrorCode::Internal => "database/internal",
15            DatabaseErrorCode::PermissionDenied => "database/permission-denied",
16        }
17    }
18}
19
20#[derive(Clone, Debug)]
21pub struct DatabaseError {
22    pub code: DatabaseErrorCode,
23    message: String,
24}
25
26impl DatabaseError {
27    pub fn new(code: DatabaseErrorCode, message: impl Into<String>) -> Self {
28        Self {
29            code,
30            message: message.into(),
31        }
32    }
33
34    pub fn code_str(&self) -> &'static str {
35        self.code.as_str()
36    }
37}
38
39impl Display for DatabaseError {
40    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
41        write!(f, "{} ({})", self.message, self.code_str())
42    }
43}
44
45impl std::error::Error for DatabaseError {}
46
47pub type DatabaseResult<T> = Result<T, DatabaseError>;
48
49pub fn invalid_argument(message: impl Into<String>) -> DatabaseError {
50    DatabaseError::new(DatabaseErrorCode::InvalidArgument, message)
51}
52
53pub fn internal_error(message: impl Into<String>) -> DatabaseError {
54    DatabaseError::new(DatabaseErrorCode::Internal, message)
55}
56
57pub fn permission_denied(message: impl Into<String>) -> DatabaseError {
58    DatabaseError::new(DatabaseErrorCode::PermissionDenied, message)
59}