use crate::{Database, DatabaseError};
use async_trait::async_trait;
#[async_trait]
pub trait Executable: Send + Sync {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError>;
}
#[async_trait]
impl Executable for String {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_raw(self).await
}
}
#[async_trait]
impl Executable for &str {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_raw(self).await
}
}
#[cfg(feature = "schema")]
#[async_trait]
impl Executable for crate::schema::CreateTableStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_create_table(self).await
}
}
#[cfg(feature = "schema")]
#[async_trait]
impl Executable for crate::schema::DropTableStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_drop_table(self).await
}
}
#[cfg(feature = "schema")]
#[async_trait]
impl Executable for crate::schema::CreateIndexStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_create_index(self).await
}
}
#[cfg(feature = "schema")]
#[async_trait]
impl Executable for crate::schema::DropIndexStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_drop_index(self).await
}
}
#[cfg(feature = "schema")]
#[async_trait]
impl Executable for crate::schema::AlterTableStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_alter_table(self).await
}
}
#[async_trait]
impl Executable for crate::query::InsertStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_insert(self).await.map(|_| ())
}
}
#[async_trait]
impl Executable for crate::query::UpdateStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_update(self).await.map(|_| ())
}
}
#[async_trait]
impl Executable for crate::query::DeleteStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_delete(self).await.map(|_| ())
}
}
#[async_trait]
impl Executable for crate::query::UpsertStatement<'_> {
async fn execute(&self, db: &dyn Database) -> Result<(), DatabaseError> {
db.exec_upsert(self).await.map(|_| ())
}
}