use crate::{Turso, TursoTypeInfo};
use sqlx_core::value::{Value, ValueRef};
use std::borrow::Cow;
#[derive(Debug, Clone)]
pub struct TursoValue(pub(crate) turso::Value);
#[derive(Debug, Clone, Copy)]
pub struct TursoValueRef<'r>(pub(crate) &'r TursoValue);
impl TursoValue {
pub(crate) fn info(&self) -> TursoTypeInfo {
match self.0 {
turso::Value::Null => TursoTypeInfo::Null,
turso::Value::Integer(_) => TursoTypeInfo::Integer,
turso::Value::Real(_) => TursoTypeInfo::Real,
turso::Value::Text(_) => TursoTypeInfo::Text,
turso::Value::Blob(_) => TursoTypeInfo::Blob,
}
}
}
impl Value for TursoValue {
type Database = Turso;
fn as_ref(&self) -> TursoValueRef<'_> {
TursoValueRef(self)
}
fn type_info(&self) -> Cow<'_, TursoTypeInfo> {
Cow::Owned(self.info())
}
fn is_null(&self) -> bool {
self.0.is_null()
}
}
impl<'r> ValueRef<'r> for TursoValueRef<'r> {
type Database = Turso;
fn to_owned(&self) -> TursoValue {
self.0.clone()
}
fn type_info(&self) -> Cow<'_, TursoTypeInfo> {
self.0.type_info()
}
fn is_null(&self) -> bool {
self.0.is_null()
}
}