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