conditional_trait_gen
A fork of the trait_gen crate, adding support for specializing trait methods
based on the type it is generated for.
Introduces a #[when]
attribute that can be used on methods of the trait implementation to customize the method based on
the actual type used by the generator.
Example:
#[async_trait]
trait Repo {
async fn create(&self, param: String) -> Result<u64, String>;
async fn read(&self, id: u64) -> Result<String, String>;
async fn update(&self, id: u64, param: String) -> Result<(), String>;
async fn delete(&self, id: u64) -> Result<(), String>;
}
#[trait_gen(DB -> sqlx::sqlite::Sqlite, sqlx::mysql::MySql, sqlx::postgres::Postgres)]
#[async_trait]
impl Repo for sqlx::Pool<DB> {
async fn create(&self, param: String) -> Result<u64, String> {
todo!()
}
async fn read(&self, id: u64) -> Result<String, String> {
todo!()
}
#[when(sqlx::sqlite::Sqlite -> update)]
async fn update_sqlite(&self, id: u64, param: String) -> Result<(), String> {
todo!()
}
#[when(sqlx::mysql::MySql -> update)]
async fn update_mysql(&self, id: u64, param: String) -> Result<(), String> {
todo!()
}
#[when(sqlx::postgres::Postgres -> update)]
async fn update_postgres(&self, id: u64, param: String) -> Result<(), String> {
todo!()
}
async fn delete(&self, id: u64) -> Result<(), String> {
todo!()
}
}