ft-sys 0.3.0

ft-sdk: SDK for building FifthTry Applications
Documentation
use diesel::query_builder::BindCollector;
use diesel::serialize::{IsNull, Output};
use diesel::sql_types::HasSqlType;
use diesel::QueryResult;
use ft_sys::diesel_sqlite::backend::Sqlite;

#[derive(Debug, Default, serde::Serialize)]
pub struct SqliteBindCollector<'a> {
    pub binds: Vec<ft_sys_shared::SqliteRawValue>,
    pub _m: std::marker::PhantomData<&'a ()>,
}

impl SqliteBindCollector<'_> {
    pub fn new() -> Self {
        Self {
            binds: Vec::new(),
            _m: std::marker::PhantomData,
        }
    }
}

impl<'a> BindCollector<'a, Sqlite> for SqliteBindCollector<'a> {
    type Buffer = ft_sys_shared::SqliteRawValue;

    fn push_bound_value<T, U>(&mut self, bind: &'a U, metadata_lookup: &mut ()) -> QueryResult<()>
    where
        Sqlite: diesel::sql_types::HasSqlType<T>,
        U: diesel::serialize::ToSql<T, Sqlite> + ?Sized,
    {
        let value = ft_sys_shared::SqliteRawValue::Null;
        let mut to_sql_output = Output::new(value, metadata_lookup);
        let is_null = bind
            .to_sql(&mut to_sql_output)
            .map_err(diesel::result::Error::SerializationError)?;
        let bind = to_sql_output.into_inner();
        let _metadata = Sqlite::metadata(metadata_lookup);
        self.binds.push(match is_null {
            IsNull::No => bind,
            IsNull::Yes => ft_sys_shared::SqliteRawValue::Null,
        });
        Ok(())
    }
}