diff --git a/torn-api/Cargo.toml b/torn-api/Cargo.toml index 1be7e9a..59c5311 100644 --- a/torn-api/Cargo.toml +++ b/torn-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "torn-api" -version = "0.5.1" +version = "0.5.2" edition = "2021" authors = ["Pyrit [2111649]"] license = "MIT" diff --git a/torn-api/src/faction.rs b/torn-api/src/faction.rs index d6e46cd..028cab5 100644 --- a/torn-api/src/faction.rs +++ b/torn-api/src/faction.rs @@ -47,7 +47,7 @@ mod tests { let response = Client::default() .torn_api(key) - .faction(None, |b| b.selections(&[Selection::Basic])) + .faction(|b| b.selections(&[Selection::Basic])) .await .unwrap(); diff --git a/torn-api/src/lib.rs b/torn-api/src/lib.rs index eafa5b3..5c05602 100644 --- a/torn-api/src/lib.rs +++ b/torn-api/src/lib.rs @@ -180,18 +180,25 @@ where A: ApiCategoryResponse, { request: ApiRequest, + id: Option, +} + +impl Default for ApiRequestBuilder +where + A: ApiCategoryResponse, +{ + fn default() -> Self { + Self { + request: Default::default(), + id: None, + } + } } impl ApiRequestBuilder where A: ApiCategoryResponse, { - pub(crate) fn new() -> Self { - Self { - request: ApiRequest::default(), - } - } - #[must_use] pub fn selections(mut self, selections: &[A::Selection]) -> Self { self.request @@ -217,6 +224,15 @@ where self.request.comment = Some(comment); self } + + #[must_use] + pub fn id(mut self, id: I) -> Self + where + I: num_traits::AsPrimitive, + { + self.id = Some(id.as_()); + self + } } #[cfg(test)] @@ -259,11 +275,7 @@ pub(crate) mod tests { async fn reqwest() { let key = setup(); - Client::default() - .torn_api(key) - .user(None, |b| b) - .await - .unwrap(); + Client::default().torn_api(key).user(|b| b).await.unwrap(); } #[cfg(feature = "awc")] diff --git a/torn-api/src/local.rs b/torn-api/src/local.rs index 3bcdf52..17013a2 100644 --- a/torn-api/src/local.rs +++ b/torn-api/src/local.rs @@ -7,54 +7,48 @@ use crate::{ ApiResponse, DirectExecutor, }; -pub struct ApiProvider<'a, C, E, I = i32> +pub struct ApiProvider<'a, C, E> where C: ApiClient, E: RequestExecutor, - I: num_traits::AsPrimitive, { client: &'a C, executor: E, - _marker: std::marker::PhantomData, } -impl<'a, C, E, I> ApiProvider<'a, C, E, I> +impl<'a, C, E> ApiProvider<'a, C, E> where C: ApiClient, E: RequestExecutor, - I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, - i64: num_traits::AsPrimitive, { - pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E, I> { - Self { - client, - executor, - _marker: Default::default(), - } + pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E> { + Self { client, executor } } - pub async fn user(&self, id: Option, build: F) -> Result + pub async fn user(&self, build: F) -> Result where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor - .execute(self.client, builder.request, id.map(|i| i.as_())) + .execute(self.client, builder.request, builder.id) .await } - pub async fn users( + pub async fn users( &self, ids: L, build: F, ) -> HashMap> where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, + I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, + i64: num_traits::AsPrimitive, L: IntoIterator, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor @@ -69,28 +63,30 @@ where .collect() } - pub async fn faction(&self, id: Option, build: F) -> Result + pub async fn faction(&self, build: F) -> Result where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor - .execute(self.client, builder.request, id.map(|i| i.as_())) + .execute(self.client, builder.request, builder.id) .await } - pub async fn factions( + pub async fn factions( &self, ids: L, build: F, ) -> HashMap> where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, + I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, + i64: num_traits::AsPrimitive, L: IntoIterator, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor @@ -105,28 +101,30 @@ where .collect() } - pub async fn torn(&self, id: Option, build: F) -> Result + pub async fn torn(&self, build: F) -> Result where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor - .execute(self.client, builder.request, id.map(|i| i.as_())) + .execute(self.client, builder.request, builder.id) .await } - pub async fn torns( + pub async fn torns( &self, ids: L, build: F, ) -> HashMap> where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, + I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, + i64: num_traits::AsPrimitive, L: IntoIterator, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor diff --git a/torn-api/src/send.rs b/torn-api/src/send.rs index 49e57f0..2989bec 100644 --- a/torn-api/src/send.rs +++ b/torn-api/src/send.rs @@ -7,54 +7,48 @@ use crate::{ ApiResponse, DirectExecutor, }; -pub struct ApiProvider<'a, C, E, I = i32> +pub struct ApiProvider<'a, C, E> where C: ApiClient, E: RequestExecutor, - I: num_traits::AsPrimitive, { client: &'a C, executor: E, - _marker: std::marker::PhantomData, } -impl<'a, C, E, I> ApiProvider<'a, C, E, I> +impl<'a, C, E> ApiProvider<'a, C, E> where C: ApiClient, E: RequestExecutor, - I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, - i64: num_traits::AsPrimitive, { - pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E, I> { - Self { - client, - executor, - _marker: Default::default(), - } + pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E> { + Self { client, executor } } - pub async fn user(&self, id: Option, build: F) -> Result + pub async fn user(&self, build: F) -> Result where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor - .execute(self.client, builder.request, id.map(|i| i.as_())) + .execute(self.client, builder.request, builder.id) .await } - pub async fn users( + pub async fn users( &self, ids: L, build: F, ) -> HashMap> where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, + I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, + i64: num_traits::AsPrimitive, L: IntoIterator, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor @@ -69,28 +63,30 @@ where .collect() } - pub async fn faction(&self, id: Option, build: F) -> Result + pub async fn faction(&self, build: F) -> Result where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor - .execute(self.client, builder.request, id.map(|i| i.as_())) + .execute(self.client, builder.request, builder.id) .await } - pub async fn factions( + pub async fn factions( &self, ids: L, build: F, ) -> HashMap> where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, + I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, + i64: num_traits::AsPrimitive, L: IntoIterator, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor @@ -105,28 +101,30 @@ where .collect() } - pub async fn torn(&self, id: Option, build: F) -> Result + pub async fn torn(&self, build: F) -> Result where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor - .execute(self.client, builder.request, id.map(|i| i.as_())) + .execute(self.client, builder.request, builder.id) .await } - pub async fn torns( + pub async fn torns( &self, ids: L, build: F, ) -> HashMap> where F: FnOnce(ApiRequestBuilder) -> ApiRequestBuilder, + I: num_traits::AsPrimitive + std::hash::Hash + std::cmp::Eq, + i64: num_traits::AsPrimitive, L: IntoIterator, { - let mut builder = ApiRequestBuilder::new(); + let mut builder = ApiRequestBuilder::default(); builder = build(builder); self.executor diff --git a/torn-api/src/torn.rs b/torn-api/src/torn.rs index 7c43202..5a0f2d4 100644 --- a/torn-api/src/torn.rs +++ b/torn-api/src/torn.rs @@ -91,7 +91,7 @@ mod tests { let response = Client::default() .torn_api(key) - .torn(None, |b| b.selections(&[Selection::Competition])) + .torn(|b| b.selections(&[Selection::Competition])) .await .unwrap(); diff --git a/torn-api/src/user.rs b/torn-api/src/user.rs index 0c52540..a36582e 100644 --- a/torn-api/src/user.rs +++ b/torn-api/src/user.rs @@ -399,7 +399,7 @@ mod tests { let response = Client::default() .torn_api(key) - .user(None, |b| { + .user(|b| { b.selections(&[ Selection::Basic, Selection::Discord, @@ -424,7 +424,7 @@ mod tests { let response = Client::default() .torn_api(key) - .user(Some(28), |b| b.selections(&[Selection::Profile])) + .user(|b| b.id(28).selections(&[Selection::Profile])) .await .unwrap(); @@ -439,7 +439,7 @@ mod tests { let response = Client::default() .torn_api(key) - .user(None, |b| b.selections(&[Selection::Profile])) + .user(|b| b.selections(&[Selection::Profile])) .await .unwrap(); @@ -453,10 +453,27 @@ mod tests { let response = Client::default() .torn_api(key) - .users([1, 2111649], |b| b.selections(&[Selection::Basic])) + .users([1, 2111649, 374272176892674048i64], |b| { + b.selections(&[Selection::Basic]) + }) .await; response.get(&1).as_ref().unwrap().as_ref().unwrap(); response.get(&2111649).as_ref().unwrap().as_ref().unwrap(); } + + #[async_test] + async fn discord() { + let key = setup(); + + let basic = Client::default() + .torn_api(key) + .user(|b| b.id(374272176892674048i64).selections(&[Selection::Basic])) + .await + .unwrap() + .basic() + .unwrap(); + + assert_eq!(basic.player_id, 2111649); + } }