use scylla::serialize::row::SerializeRow;
use crate::callbacks::{Callbacks, DeleteAction};
use crate::model::Model;
use crate::query::{CharybdisCbQuery, CharybdisQuery, ModelMutation, QueryValue};
pub trait Delete: Model {
fn delete_by_query<Val: SerializeRow>(
query: &'static str,
values: Val,
) -> CharybdisQuery<'static, Val, Self, ModelMutation> {
CharybdisQuery::new(query, QueryValue::Owned(values))
}
fn delete(&self) -> CharybdisQuery<'_, Self::PrimaryKey, Self, ModelMutation> {
CharybdisQuery::new(Self::DELETE_QUERY, QueryValue::Owned(self.primary_key_values()))
}
fn delete_by_partition_key(&self) -> CharybdisQuery<'_, Self::PartitionKey, Self, ModelMutation> {
CharybdisQuery::new(
Self::DELETE_BY_PARTITION_KEY_QUERY,
QueryValue::Owned(self.partition_key_values()),
)
}
}
impl<M: Model> Delete for M {}
pub trait DeleteWithCallbacks<'a>: Callbacks {
fn delete_cb(
&'a mut self,
extension: &'a Self::Extension,
) -> CharybdisCbQuery<'a, Self, DeleteAction<Self>, Self::PrimaryKey> {
CharybdisCbQuery::new(Self::DELETE_QUERY, self, extension)
}
}
impl<M: Callbacks> DeleteWithCallbacks<'_> for M {}