burncloud_database_impl/
common.rs1use 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}