sqlx-turso-driver 0.0.1

An asynchronous SQLx driver for embedded Turso databases
use crate::Turso;
use sqlx_core::{arguments::Arguments, encode::Encode, error::BoxDynError, types::Type};

/// Owned positional values; each execution receives a fresh buffer.
#[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);