diff --git a/src/lib.rs b/src/lib.rs index 221d627..e733501 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,15 +14,13 @@ pub fn http_response(_attr: TokenStream, item: TokenStream) -> TokenStream { let impl_block = match &ast.data { Data::Struct(_) => { quote! { + #[async_trait::async_trait] impl Responsable for #name where - Self: serde::de::DeserializeOwned + Sized, + Self: serde::de::DeserializeOwned + Sized + Send, { - fn receive(resp: awc::ClientResponse) -> Result> { - let parsed = actix_web::rt::System::new() - .block_on(async { - resp.json::().await - }) + async fn receive(mut resp: actix_web::ClientResponse) -> Result> { + let parsed = resp.json::().await .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?; Ok(parsed) } @@ -47,12 +45,10 @@ pub fn http_response(_attr: TokenStream, item: TokenStream) -> TokenStream { }); quote! { + #[async_trait::async_trait] impl Responsable for #name { - fn receive(resp: awc::ClientResponse) -> Result> { - let body = actix_web::rt::System::new() - .block_on(async { - resp.body().await - }) + async fn receive(mut resp: actix_web::ClientResponse) -> Result> { + let body = resp.body().await .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?; #(#variant_arms)*