use crate::Turso;
use sqlx_core::{arguments::Arguments, encode::Encode, error::BoxDynError, types::Type};
#[derive(Debug, Default)]
pub struct TursoArguments {
pub(crate) values: Vec<turso::Value>,
}
impl Arguments for TursoArguments {
type Database = Turso;
fn reserve(&mut self, additional: usize, _size: usize) {
self.values.reserve(additional);
}
fn add<'t, T>(&mut self, value: T) -> Result<(), BoxDynError>
where
T: Encode<'t, Turso> + Type<Turso>,
{
let length = self.values.len();
match value.encode(&mut self.values) {
Ok(is_null) => {
if is_null.is_null() {
self.values.truncate(length);
self.values.push(turso::Value::Null);
}
Ok(())
}
Err(error) => {
self.values.truncate(length);
Err(error)
}
}
}
fn len(&self) -> usize {
self.values.len()
}
}
sqlx_core::impl_into_arguments_for_arguments!(TursoArguments);