use async_trait::async_trait;
use serde::de::DeserializeOwned;
use sqlx::{Pool, Postgres};
use crate::error::ModelResult;
use crate::model::Model;
#[async_trait]
pub trait TypeSafeRelationshipLoader<Parent, Related>
where
Parent: Model + Send + Sync,
Related: Model + Send + Sync + DeserializeOwned,
{
async fn load_for_instance(
&self,
parent: &Parent,
pool: &Pool<Postgres>,
) -> ModelResult<Related>;
async fn load_for_instances(
&self,
parents: &mut [Parent],
pool: &Pool<Postgres>,
) -> ModelResult<Vec<Related>>;
async fn load_typed<T>(&self, parent: &Parent, pool: &Pool<Postgres>) -> ModelResult<T>
where
T: DeserializeOwned + Send + Sync;
}