arel 0.0.2

simulate rails arel
Documentation
use crate::statements::{StatementAble, Insert};
use serde_json::{Value as Json};
use std::marker::PhantomData;
use std::default::Default;
use crate::traits::ModelAble;
use crate::nodes::{SqlLiteral};

#[derive(Debug, Clone)]
pub struct InsertStatement<M: ModelAble> {
    insert: Option<Insert<M>>,
    _marker: PhantomData<M>,
}

impl<M> Default for InsertStatement<M> where M: ModelAble {
    fn default() -> Self {
        Self {
            insert: None,
            _marker: PhantomData,
        }
    }
}

impl<M> InsertStatement<M> where M: ModelAble {
    pub fn insert(&mut self, condition: Json) -> &mut Self {
        self.insert = Some(Insert::new(condition));
        self
    }
    pub fn get_insert_sql(&self) -> Option<SqlLiteral> {
        if let Some(insert) = &self.insert {
            let mut sql = "INSERT INTO ".to_string();
            sql.push_str(&insert.to_sql());
            Some(SqlLiteral::new(sql))
        } else {
            None
        }
    }
}