From 197b30d76bc6362715ab9223a48033617b84e66e Mon Sep 17 00:00:00 2001 From: TotallyNot <44345987+TotallyNot@users.noreply.github.com> Date: Mon, 27 Feb 2023 00:14:37 +0100 Subject: [PATCH] changed executor typings --- torn-api/Cargo.toml | 2 +- torn-api/src/lib.rs | 18 +++++----- torn-api/src/local.rs | 67 +++++++++++++++++++++++--------------- torn-api/src/send.rs | 67 +++++++++++++++++++++++--------------- torn-key-pool/Cargo.toml | 4 +-- torn-key-pool/src/local.rs | 14 ++++---- torn-key-pool/src/send.rs | 14 ++++---- 7 files changed, 106 insertions(+), 80 deletions(-) diff --git a/torn-api/Cargo.toml b/torn-api/Cargo.toml index bba6c97..d1edf5e 100644 --- a/torn-api/Cargo.toml +++ b/torn-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "torn-api" -version = "0.5.9" +version = "0.5.10" edition = "2021" authors = ["Pyrit [2111649]"] license = "MIT" diff --git a/torn-api/src/lib.rs b/torn-api/src/lib.rs index a12a4bf..21943da 100644 --- a/torn-api/src/lib.rs +++ b/torn-api/src/lib.rs @@ -96,7 +96,7 @@ impl ApiResponse { } } -pub trait ApiSelection { +pub trait ApiSelection: Send + Sync { fn raw_value(&self) -> &'static str; fn category() -> &'static str; @@ -137,7 +137,7 @@ where #[derive(Debug)] pub struct ApiRequest where - A: ApiCategoryResponse, + A: ApiSelection, { pub selections: Vec<&'static str>, pub from: Option>, @@ -148,7 +148,7 @@ where impl std::default::Default for ApiRequest where - A: ApiCategoryResponse, + A: ApiSelection, { fn default() -> Self { Self { @@ -163,10 +163,10 @@ where impl ApiRequest where - A: ApiCategoryResponse, + A: ApiSelection, { pub fn url(&self, key: &str, id: Option<&str>) -> String { - let mut url = format!("https://api.torn.com/{}/", A::Selection::category()); + let mut url = format!("https://api.torn.com/{}/", A::category()); if let Some(id) = id { write!(url, "{}", id).unwrap(); @@ -192,7 +192,7 @@ where pub struct ApiRequestBuilder where - A: ApiCategoryResponse, + A: ApiSelection, { request: ApiRequest, id: Option, @@ -200,7 +200,7 @@ where impl Default for ApiRequestBuilder where - A: ApiCategoryResponse, + A: ApiSelection, { fn default() -> Self { Self { @@ -212,10 +212,10 @@ where impl ApiRequestBuilder where - A: ApiCategoryResponse, + A: ApiSelection, { #[must_use] - pub fn selections(mut self, selections: &[A::Selection]) -> Self { + pub fn selections(mut self, selections: &[A]) -> Self { self.request .selections .append(&mut selections.iter().map(ApiSelection::raw_value).collect()); diff --git a/torn-api/src/local.rs b/torn-api/src/local.rs index a836f6b..e4a1882 100644 --- a/torn-api/src/local.rs +++ b/torn-api/src/local.rs @@ -2,7 +2,9 @@ use std::collections::HashMap; use async_trait::async_trait; -use crate::{ApiCategoryResponse, ApiClientError, ApiRequest, ApiResponse, DirectExecutor}; +use crate::{ + ApiCategoryResponse, ApiClientError, ApiRequest, ApiResponse, ApiSelection, DirectExecutor, +}; pub struct ApiProvider<'a, C, E> where @@ -28,8 +30,8 @@ where pub async fn user(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -37,6 +39,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::user::Response::from_response) } #[cfg(feature = "user")] @@ -47,8 +50,8 @@ where ) -> HashMap> where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, I: ToString + std::hash::Hash + std::cmp::Eq, L: IntoIterator, { @@ -58,14 +61,17 @@ where self.executor .execute_many(self.client, builder.request, Vec::from_iter(ids)) .await + .into_iter() + .map(|(k, v)| (k, v.map(crate::user::Response::from_response))) + .collect() } #[cfg(feature = "faction")] pub async fn faction(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -73,6 +79,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::faction::Response::from_response) } #[cfg(feature = "faction")] @@ -83,8 +90,8 @@ where ) -> HashMap> where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, I: ToString + std::hash::Hash + std::cmp::Eq, L: IntoIterator, { @@ -94,14 +101,17 @@ where self.executor .execute_many(self.client, builder.request, Vec::from_iter(ids)) .await + .into_iter() + .map(|(k, v)| (k, v.map(crate::faction::Response::from_response))) + .collect() } #[cfg(feature = "torn")] pub async fn torn(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -109,6 +119,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::torn::Response::from_response) } #[cfg(feature = "torn")] @@ -119,8 +130,8 @@ where ) -> HashMap> where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, I: ToString + std::hash::Hash + std::cmp::Eq, L: IntoIterator, { @@ -130,14 +141,17 @@ where self.executor .execute_many(self.client, builder.request, Vec::from_iter(ids)) .await + .into_iter() + .map(|(k, v)| (k, v.map(crate::torn::Response::from_response))) + .collect() } #[cfg(feature = "key")] pub async fn key(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -145,6 +159,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::key::Response::from_response) } } @@ -160,18 +175,18 @@ where client: &C, request: ApiRequest, id: Option, - ) -> Result + ) -> Result where - A: ApiCategoryResponse; + A: ApiSelection; async fn execute_many( &self, client: &C, request: ApiRequest, ids: Vec, - ) -> HashMap> + ) -> HashMap> where - A: ApiCategoryResponse, + A: ApiSelection, I: ToString + std::hash::Hash + std::cmp::Eq; } @@ -187,15 +202,15 @@ where client: &C, request: ApiRequest, id: Option, - ) -> Result + ) -> Result where - A: ApiCategoryResponse, + A: ApiSelection, { let url = request.url(&self.key, id.as_deref()); let value = client.request(url).await.map_err(ApiClientError::Client)?; - Ok(A::from_response(ApiResponse::from_value(value)?)) + Ok(ApiResponse::from_value(value)?) } async fn execute_many( @@ -203,9 +218,9 @@ where client: &C, request: ApiRequest, ids: Vec, - ) -> HashMap> + ) -> HashMap> where - A: ApiCategoryResponse, + A: ApiSelection, I: ToString + std::hash::Hash + std::cmp::Eq, { let request_ref = &request; @@ -217,9 +232,7 @@ where ( i, - value - .and_then(|v| ApiResponse::from_value(v).map_err(Into::into)) - .map(A::from_response), + value.and_then(|v| ApiResponse::from_value(v).map_err(Into::into)), ) })) .await; diff --git a/torn-api/src/send.rs b/torn-api/src/send.rs index f211792..3162016 100644 --- a/torn-api/src/send.rs +++ b/torn-api/src/send.rs @@ -2,7 +2,9 @@ use std::collections::HashMap; use async_trait::async_trait; -use crate::{ApiCategoryResponse, ApiClientError, ApiRequest, ApiResponse, DirectExecutor}; +use crate::{ + ApiCategoryResponse, ApiClientError, ApiRequest, ApiResponse, ApiSelection, DirectExecutor, +}; pub struct ApiProvider<'a, C, E> where @@ -28,8 +30,8 @@ where pub async fn user(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -37,6 +39,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::user::Response::from_response) } #[cfg(feature = "user")] @@ -47,8 +50,8 @@ where ) -> HashMap> where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, I: ToString + std::hash::Hash + std::cmp::Eq + Send + Sync, L: IntoIterator, { @@ -58,14 +61,17 @@ where self.executor .execute_many(self.client, builder.request, Vec::from_iter(ids)) .await + .into_iter() + .map(|(k, v)| (k, v.map(crate::user::Response::from_response))) + .collect() } #[cfg(feature = "faction")] pub async fn faction(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -73,6 +79,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::faction::Response::from_response) } #[cfg(feature = "faction")] @@ -83,8 +90,8 @@ where ) -> HashMap> where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, I: ToString + std::hash::Hash + std::cmp::Eq + Send + Sync, L: IntoIterator, { @@ -94,14 +101,17 @@ where self.executor .execute_many(self.client, builder.request, Vec::from_iter(ids)) .await + .into_iter() + .map(|(k, v)| (k, v.map(crate::faction::Response::from_response))) + .collect() } #[cfg(feature = "torn")] pub async fn torn(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -109,6 +119,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::torn::Response::from_response) } #[cfg(feature = "torn")] @@ -119,8 +130,8 @@ where ) -> HashMap> where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, I: ToString + std::hash::Hash + std::cmp::Eq + Send + Sync, L: IntoIterator, { @@ -130,14 +141,17 @@ where self.executor .execute_many(self.client, builder.request, Vec::from_iter(ids)) .await + .into_iter() + .map(|(k, v)| (k, v.map(crate::torn::Response::from_response))) + .collect() } #[cfg(feature = "key")] pub async fn key(&self, build: F) -> Result where F: FnOnce( - crate::ApiRequestBuilder, - ) -> crate::ApiRequestBuilder, + crate::ApiRequestBuilder, + ) -> crate::ApiRequestBuilder, { let mut builder = crate::ApiRequestBuilder::default(); builder = build(builder); @@ -145,6 +159,7 @@ where self.executor .execute(self.client, builder.request, builder.id) .await + .map(crate::key::Response::from_response) } } @@ -160,18 +175,18 @@ where client: &C, request: ApiRequest, id: Option, - ) -> Result + ) -> Result where - A: ApiCategoryResponse; + A: ApiSelection; async fn execute_many( &self, client: &C, request: ApiRequest, ids: Vec, - ) -> HashMap> + ) -> HashMap> where - A: ApiCategoryResponse, + A: ApiSelection, I: ToString + std::hash::Hash + std::cmp::Eq + Send + Sync; } @@ -187,15 +202,15 @@ where client: &C, request: ApiRequest, id: Option, - ) -> Result + ) -> Result where - A: ApiCategoryResponse, + A: ApiSelection, { let url = request.url(&self.key, id.as_deref()); let value = client.request(url).await.map_err(ApiClientError::Client)?; - Ok(A::from_response(ApiResponse::from_value(value)?)) + Ok(ApiResponse::from_value(value)?) } async fn execute_many( @@ -203,9 +218,9 @@ where client: &C, request: ApiRequest, ids: Vec, - ) -> HashMap> + ) -> HashMap> where - A: ApiCategoryResponse, + A: ApiSelection, I: ToString + std::hash::Hash + std::cmp::Eq + Send + Sync, { let request_ref = &request; @@ -217,9 +232,7 @@ where ( i, - value - .and_then(|v| ApiResponse::from_value(v).map_err(Into::into)) - .map(A::from_response), + value.and_then(|v| ApiResponse::from_value(v).map_err(Into::into)), ) })) .await; diff --git a/torn-key-pool/Cargo.toml b/torn-key-pool/Cargo.toml index 4f61abf..13be916 100644 --- a/torn-key-pool/Cargo.toml +++ b/torn-key-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "torn-key-pool" -version = "0.5.5" +version = "0.5.6" edition = "2021" authors = ["Pyrit [2111649]"] license = "MIT" @@ -17,7 +17,7 @@ tokio-runtime = [ "dep:tokio", "dep:rand" ] actix-runtime = [ "dep:actix-rt", "dep:rand" ] [dependencies] -torn-api = { path = "../torn-api", default-features = false, version = "0.5.5" } +torn-api = { path = "../torn-api", default-features = false, version = "0.5.10" } async-trait = "0.1" thiserror = "1" diff --git a/torn-key-pool/src/local.rs b/torn-key-pool/src/local.rs index a066f9d..8eaabf3 100644 --- a/torn-key-pool/src/local.rs +++ b/torn-key-pool/src/local.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use torn_api::{ local::{ApiClient, ApiProvider, RequestExecutor}, - ApiCategoryResponse, ApiRequest, ApiResponse, ResponseError, + ApiRequest, ApiResponse, ApiSelection, ResponseError, }; use crate::{ApiKey, KeyPoolError, KeyPoolExecutor, KeyPoolStorage}; @@ -22,9 +22,9 @@ where client: &C, mut request: ApiRequest, id: Option, - ) -> Result + ) -> Result where - A: ApiCategoryResponse, + A: ApiSelection, { request.comment = self.comment.map(ToOwned::to_owned); loop { @@ -49,7 +49,7 @@ where } } Err(parsing_error) => return Err(KeyPoolError::Response(parsing_error)), - Ok(res) => return Ok(A::from_response(res)), + Ok(res) => return Ok(res), }; } } @@ -59,9 +59,9 @@ where client: &C, mut request: ApiRequest, ids: Vec, - ) -> HashMap> + ) -> HashMap> where - A: ApiCategoryResponse, + A: ApiSelection, I: ToString + std::hash::Hash + std::cmp::Eq, { let keys = match self @@ -111,7 +111,7 @@ where Err(parsing_error) => { return (id, Err(KeyPoolError::Response(parsing_error))) } - Ok(res) => return (id, Ok(A::from_response(res))), + Ok(res) => return (id, Ok(res)), }; key = match self.storage.acquire_key(self.domain.clone()).await { diff --git a/torn-key-pool/src/send.rs b/torn-key-pool/src/send.rs index f538b99..d4d9bba 100644 --- a/torn-key-pool/src/send.rs +++ b/torn-key-pool/src/send.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use torn_api::{ send::{ApiClient, ApiProvider, RequestExecutor}, - ApiCategoryResponse, ApiRequest, ApiResponse, ResponseError, + ApiRequest, ApiResponse, ApiSelection, ResponseError, }; use crate::{ApiKey, KeyPoolError, KeyPoolExecutor, KeyPoolStorage}; @@ -22,9 +22,9 @@ where client: &C, mut request: ApiRequest, id: Option, - ) -> Result + ) -> Result where - A: ApiCategoryResponse, + A: ApiSelection, { request.comment = self.comment.map(ToOwned::to_owned); loop { @@ -49,7 +49,7 @@ where } } Err(parsing_error) => return Err(KeyPoolError::Response(parsing_error)), - Ok(res) => return Ok(A::from_response(res)), + Ok(res) => return Ok(res), }; } } @@ -59,9 +59,9 @@ where client: &C, mut request: ApiRequest, ids: Vec, - ) -> HashMap> + ) -> HashMap> where - A: ApiCategoryResponse, + A: ApiSelection, I: ToString + std::hash::Hash + std::cmp::Eq + Send + Sync, { let keys = match self @@ -111,7 +111,7 @@ where Err(parsing_error) => { return (id, Err(KeyPoolError::Response(parsing_error))) } - Ok(res) => return (id, Ok(A::from_response(res))), + Ok(res) => return (id, Ok(res)), }; key = match self.storage.acquire_key(self.domain.clone()).await {