fix(error): directly return sqlx Error type
This commit is contained in:
parent
7a6243c6e4
commit
b96bdb3068
1 changed files with 9 additions and 19 deletions
|
|
@ -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(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue