use async_trait::async_trait;

#[async_trait]
pub trait MongoCrud {
    async fn insert(&self, ctx: &(impl crate::MongoContext + Sync)) -> bool;
    async fn update(&self, ctx: &(impl crate::MongoContext + Sync)) -> bool;
    async fn delete(&self, ctx: &(impl crate::MongoContext + Sync)) -> bool;
    async fn find(&self, ctx: &(impl crate::MongoContext + Sync), id: &str) -> Self;
    async fn find_all(&self, ctx: &(impl crate::MongoContext + Sync), filter: mongodb::bson::Document) -> Vec<Box<Self>>;
}