use crate::traits::model::Model;
pub trait Repository<T: Model> {
type Error;
fn save(&self, model: &T) -> Result<T, Self::Error>;
fn find_by_id(&self, id: &T::PrimaryKey) -> Result<Option<T>, Self::Error>;
fn find_all(&self) -> Result<Vec<T>, Self::Error>;
fn delete(&self, id: &T::PrimaryKey) -> Result<bool, Self::Error>;
fn exists(&self, id: &T::PrimaryKey) -> Result<bool, Self::Error>;
}