tank-core 0.39.0

Core of Tank: the Rust data layer. This is intended to be used by drivers to implement a backend.
Documentation
use crate::{AsEntity, Driver, DynQuery, NA, SqlWriter};
use std::marker::PhantomData;

pub struct InsertIntoQueryBuilder<Values, Update> {
    pub(crate) values: Values,
    pub(crate) update: bool,
    pub(crate) _update: PhantomData<Update>,
}

impl InsertIntoQueryBuilder<NA, NA> {
    pub fn values<Values>(self, values: Values) -> InsertIntoQueryBuilder<Values, NA>
    where
        Values: IntoIterator + Send,
        Values::IntoIter: Send,
        Values::Item: AsEntity,
    {
        InsertIntoQueryBuilder {
            values,
            update: false,
            _update: Default::default(),
        }
    }
}

impl<V, U> InsertIntoQueryBuilder<V, U>
where
    V: IntoIterator + Clone + Send,
    V::IntoIter: Send,
    V::Item: AsEntity,
{
    pub fn get_values(&self) -> V {
        self.values.clone()
    }

    pub fn get_update(&self) -> bool {
        self.update
    }

    pub fn build<D: Driver>(&self, driver: &D) -> String {
        let writer = driver.sql_writer();
        let mut query = DynQuery::default();
        writer.write_insert(&mut query, self.values.clone(), self.update);
        query.into()
    }

    pub fn build_into<D: Driver>(&self, driver: &D, out: &mut DynQuery) {
        let writer = driver.sql_writer();
        writer.write_insert(out, self.values.clone(), self.update);
    }
}