use burncloud_database_core::{QueryParam};
use burncloud_database_core::error::DatabaseError;
#[derive(Debug, Clone)]
pub struct StringParam(pub String);
#[derive(Debug, Clone)]
pub struct I64Param(pub i64);
#[derive(Debug, Clone)]
pub struct F64Param(pub f64);
#[derive(Debug, Clone)]
pub struct BoolParam(pub bool);
#[derive(Debug, Clone)]
pub struct BytesParam(pub Vec<u8>);
impl QueryParam for StringParam {
fn as_string(&self) -> String {
self.0.clone()
}
fn as_i64(&self) -> Option<i64> {
self.0.parse().ok()
}
fn as_f64(&self) -> Option<f64> {
self.0.parse().ok()
}
fn as_bool(&self) -> Option<bool> {
self.0.parse().ok()
}
fn as_bytes(&self) -> Option<&[u8]> {
Some(self.0.as_bytes())
}
}
impl QueryParam for I64Param {
fn as_string(&self) -> String {
self.0.to_string()
}
fn as_i64(&self) -> Option<i64> {
Some(self.0)
}
fn as_f64(&self) -> Option<f64> {
Some(self.0 as f64)
}
fn as_bool(&self) -> Option<bool> {
Some(self.0 != 0)
}
fn as_bytes(&self) -> Option<&[u8]> {
None
}
}
impl QueryParam for F64Param {
fn as_string(&self) -> String {
self.0.to_string()
}
fn as_i64(&self) -> Option<i64> {
Some(self.0 as i64)
}
fn as_f64(&self) -> Option<f64> {
Some(self.0)
}
fn as_bool(&self) -> Option<bool> {
Some(self.0 != 0.0)
}
fn as_bytes(&self) -> Option<&[u8]> {
None
}
}
impl QueryParam for BoolParam {
fn as_string(&self) -> String {
self.0.to_string()
}
fn as_i64(&self) -> Option<i64> {
Some(if self.0 { 1 } else { 0 })
}
fn as_f64(&self) -> Option<f64> {
Some(if self.0 { 1.0 } else { 0.0 })
}
fn as_bool(&self) -> Option<bool> {
Some(self.0)
}
fn as_bytes(&self) -> Option<&[u8]> {
None
}
}
impl QueryParam for BytesParam {
fn as_string(&self) -> String {
String::from_utf8_lossy(&self.0).to_string()
}
fn as_i64(&self) -> Option<i64> {
None
}
fn as_f64(&self) -> Option<f64> {
None
}
fn as_bool(&self) -> Option<bool> {
None
}
fn as_bytes(&self) -> Option<&[u8]> {
Some(&self.0)
}
}
pub fn map_database_error(error: Box<dyn std::error::Error + Send + Sync>) -> DatabaseError {
DatabaseError::InternalError(error.to_string())
}