cherry 0.2.1

An asynchronous ORM, which support MySQL, PostgreSQL, SQLite and SQL Server.
use std::any::Any;

use async_trait::async_trait;

use crate::{Cherry, connection};
use crate::query::delete::Delete;
use crate::query::insert::Insert;
use crate::query::insert_update::InsertUpdate;
use crate::query::select::Select;
use crate::query::update::Update;
use crate::types::{Result, Transaction};

#[async_trait]
pub trait DataSource {

    fn insert<'a, T>(&'static self, v: &'a T) -> Insert<'a> where T: Cherry + 'static {
        Insert::insert(self.type_id(),  v)
    }

    fn insert_bulk<'a, T>(&'static self, v: &'a [T]) -> Insert<'a> where T: Cherry + 'static {
        Insert::insert_bulk(self.type_id(), v)
    }

    fn insert_ignore<'a, T>(&'static self, v: &'a [T]) -> Insert<'a> where T: Cherry + 'static {
        Insert::insert_ignore(self.type_id(), v)
    }

    fn insert_replace<'a, T>(&'static self, v: &'a [T]) -> Insert<'a> where T: Cherry + 'static {
        Insert::insert_replace(self.type_id(), v)
    }

    fn insert_update<'a, T>(&'static self, v: &'a [T]) -> InsertUpdate<'a>
        where T: Cherry + 'static {
        InsertUpdate::insert_update(self.type_id(), v)
    }

    fn delete<'a, T>(&'static self) -> Delete<'a> where T: Cherry + 'static {
        Delete::new::<T>(self.type_id())
    }

    fn update<'a, T>(&'static self) -> Update<'a> where T: Cherry + 'static {
        Update::new::<T>(self.type_id())
    }

    fn select<'a, T>(&'static self) -> Select<'a, T> where T: Cherry + 'static {
        Select::new(self.type_id())
    }

    async fn begin<'a>(&'static self) -> Result<Transaction<'a>>  {
        Ok(connection::get(self.type_id())?.begin().await?)
    }

}