fix(error): directly return sqlx Error type

This commit is contained in:
Matthieu Bessat 2025-10-11 22:58:33 +02:00
parent 7a6243c6e4
commit b96bdb3068

View file

@ -11,15 +11,13 @@ use crate::models::Model;
fn gen_get_all_method(model: &Model) -> TokenStream {
let resource_ident = format_ident!("{}", &model.name);
let error_msg = format!("Failed to fetch resource {:?}", model.name.clone());
let select_query = format!("SELECT * FROM {}", model.table_name);
quote! {
pub async fn get_all(&self) -> Result<Vec<#resource_ident>> {
pub async fn get_all(&self) -> Result<Vec<#resource_ident>, sqlx::Error> {
sqlx::query_as::<_, #resource_ident>(#select_query)
.fetch_all(&self.db.0)
.await
.context(#error_msg)
}
}
}
@ -77,7 +75,6 @@ fn gen_get_many_by_id_method(model: &Model) -> TokenStream {
fn gen_insert_method(model: &Model) -> TokenStream {
let resource_ident = format_ident!("{}", &model.name);
let error_msg = format!("Failed to insert resource {:?}", model.name.clone());
let sql_columns = model.fields.iter()
.map(|f| f.name.clone())
.collect::<Vec<String>>()
@ -97,12 +94,11 @@ fn gen_insert_method(model: &Model) -> TokenStream {
.collect();
quote! {
pub async fn insert(&self, entity: &#resource_ident) -> Result<()> {
pub async fn insert(&self, entity: &#resource_ident) -> Result<(), sqlx::Error> {
sqlx::query(#insert_query)
#( .bind( &entity.#field_names ) )*
.execute(&self.db.0)
.await
.context(#error_msg)?;
.await?;
Ok(())
}
@ -127,7 +123,7 @@ fn gen_insert_many_method(model: &Model) -> TokenStream {
let fields_count: usize = model.fields.len();
quote! {
pub async fn insert_many(&self, entities: &Vec<#resource_ident>) -> Result<()> {
pub async fn insert_many(&self, entities: &Vec<#resource_ident>) -> Result<(), sqlx::Error> {
let values_templates: String = (1..(#fields_count*entities.len()+1))
.collect::<Vec<usize>>()
.chunks(#fields_count)
@ -150,8 +146,7 @@ fn gen_insert_many_method(model: &Model) -> TokenStream {
}
query
.execute(&self.db.0)
.await
.context(#error_msg)?;
.await?;
Ok(())
}
@ -161,7 +156,6 @@ fn gen_insert_many_method(model: &Model) -> TokenStream {
fn gen_update_by_id_method(model: &Model) -> TokenStream {
let resource_ident = format_ident!("{}", &model.name);
let error_msg = format!("Failed to update resource {:?}", model.name.clone());
let primary_key = &model.fields.iter()
.find(|f| f.is_primary)
.expect("A model must have at least one primary key")
@ -183,13 +177,12 @@ fn gen_update_by_id_method(model: &Model) -> TokenStream {
.collect();
quote! {
pub async fn #func_name_ident(&self, item_id: &str, entity: &#resource_ident) -> Result<()> {
pub async fn #func_name_ident(&self, item_id: &str, entity: &#resource_ident) -> Result<(), sqlx::Error> {
sqlx::query(#update_query)
.bind(item_id)
#( .bind( &entity.#field_names ) )*
.execute(&self.db.0)
.await
.context(#error_msg)?;
.await?;
Ok(())
}
@ -197,8 +190,6 @@ fn gen_update_by_id_method(model: &Model) -> TokenStream {
}
fn gen_delete_by_id_method(model: &Model) -> TokenStream {
let resource_ident = format_ident!("{}", &model.name);
let error_msg = format!("Failed to delete resource {:?}", model.name.clone());
let primary_key = &model.fields.iter()
.find(|f| f.is_primary)
.expect("A model must have at least one primary key")
@ -212,12 +203,11 @@ fn gen_delete_by_id_method(model: &Model) -> TokenStream {
);
quote! {
pub async fn #func_name_ident(&self, item_id: &str) -> Result<()> {
pub async fn #func_name_ident(&self, item_id: &str) -> Result<(), sqlx::Error> {
sqlx::query(#query)
.bind(item_id)
.execute(&self.db.0)
.await
.context(#error_msg)?;
.await?;
Ok(())
}