burncloud_database_impl/
common.rs

1use burncloud_database_core::{QueryParam};
2use burncloud_database_core::error::DatabaseError;
3
4#[derive(Debug, Clone)]
5pub struct StringParam(pub String);
6#[derive(Debug, Clone)]
7pub struct I64Param(pub i64);
8#[derive(Debug, Clone)]
9pub struct F64Param(pub f64);
10#[derive(Debug, Clone)]
11pub struct BoolParam(pub bool);
12#[derive(Debug, Clone)]
13pub struct BytesParam(pub Vec<u8>);
14
15impl QueryParam for StringParam {
16    fn as_string(&self) -> String {
17        self.0.clone()
18    }
19
20    fn as_i64(&self) -> Option<i64> {
21        self.0.parse().ok()
22    }
23
24    fn as_f64(&self) -> Option<f64> {
25        self.0.parse().ok()
26    }
27
28    fn as_bool(&self) -> Option<bool> {
29        self.0.parse().ok()
30    }
31
32    fn as_bytes(&self) -> Option<&[u8]> {
33        Some(self.0.as_bytes())
34    }
35}
36
37impl QueryParam for I64Param {
38    fn as_string(&self) -> String {
39        self.0.to_string()
40    }
41
42    fn as_i64(&self) -> Option<i64> {
43        Some(self.0)
44    }
45
46    fn as_f64(&self) -> Option<f64> {
47        Some(self.0 as f64)
48    }
49
50    fn as_bool(&self) -> Option<bool> {
51        Some(self.0 != 0)
52    }
53
54    fn as_bytes(&self) -> Option<&[u8]> {
55        None
56    }
57}
58
59impl QueryParam for F64Param {
60    fn as_string(&self) -> String {
61        self.0.to_string()
62    }
63
64    fn as_i64(&self) -> Option<i64> {
65        Some(self.0 as i64)
66    }
67
68    fn as_f64(&self) -> Option<f64> {
69        Some(self.0)
70    }
71
72    fn as_bool(&self) -> Option<bool> {
73        Some(self.0 != 0.0)
74    }
75
76    fn as_bytes(&self) -> Option<&[u8]> {
77        None
78    }
79}
80
81impl QueryParam for BoolParam {
82    fn as_string(&self) -> String {
83        self.0.to_string()
84    }
85
86    fn as_i64(&self) -> Option<i64> {
87        Some(if self.0 { 1 } else { 0 })
88    }
89
90    fn as_f64(&self) -> Option<f64> {
91        Some(if self.0 { 1.0 } else { 0.0 })
92    }
93
94    fn as_bool(&self) -> Option<bool> {
95        Some(self.0)
96    }
97
98    fn as_bytes(&self) -> Option<&[u8]> {
99        None
100    }
101}
102
103impl QueryParam for BytesParam {
104    fn as_string(&self) -> String {
105        String::from_utf8_lossy(&self.0).to_string()
106    }
107
108    fn as_i64(&self) -> Option<i64> {
109        None
110    }
111
112    fn as_f64(&self) -> Option<f64> {
113        None
114    }
115
116    fn as_bool(&self) -> Option<bool> {
117        None
118    }
119
120    fn as_bytes(&self) -> Option<&[u8]> {
121        Some(&self.0)
122    }
123}
124
125pub fn map_database_error(error: Box<dyn std::error::Error + Send + Sync>) -> DatabaseError {
126    DatabaseError::InternalError(error.to_string())
127}