revert part of the typings for single requests
This commit is contained in:
parent
102d02d390
commit
77c50fac64
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "torn-api"
|
name = "torn-api"
|
||||||
version = "0.5.1"
|
version = "0.5.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Pyrit [2111649]"]
|
authors = ["Pyrit [2111649]"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
@ -47,7 +47,7 @@ mod tests {
|
||||||
|
|
||||||
let response = Client::default()
|
let response = Client::default()
|
||||||
.torn_api(key)
|
.torn_api(key)
|
||||||
.faction(None, |b| b.selections(&[Selection::Basic]))
|
.faction(|b| b.selections(&[Selection::Basic]))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
|
@ -180,18 +180,25 @@ where
|
||||||
A: ApiCategoryResponse,
|
A: ApiCategoryResponse,
|
||||||
{
|
{
|
||||||
request: ApiRequest<A>,
|
request: ApiRequest<A>,
|
||||||
|
id: Option<i64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<A> Default for ApiRequestBuilder<A>
|
||||||
|
where
|
||||||
|
A: ApiCategoryResponse,
|
||||||
|
{
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
request: Default::default(),
|
||||||
|
id: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<A> ApiRequestBuilder<A>
|
impl<A> ApiRequestBuilder<A>
|
||||||
where
|
where
|
||||||
A: ApiCategoryResponse,
|
A: ApiCategoryResponse,
|
||||||
{
|
{
|
||||||
pub(crate) fn new() -> Self {
|
|
||||||
Self {
|
|
||||||
request: ApiRequest::default(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn selections(mut self, selections: &[A::Selection]) -> Self {
|
pub fn selections(mut self, selections: &[A::Selection]) -> Self {
|
||||||
self.request
|
self.request
|
||||||
|
@ -217,6 +224,15 @@ where
|
||||||
self.request.comment = Some(comment);
|
self.request.comment = Some(comment);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
pub fn id<I>(mut self, id: I) -> Self
|
||||||
|
where
|
||||||
|
I: num_traits::AsPrimitive<i64>,
|
||||||
|
{
|
||||||
|
self.id = Some(id.as_());
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -259,11 +275,7 @@ pub(crate) mod tests {
|
||||||
async fn reqwest() {
|
async fn reqwest() {
|
||||||
let key = setup();
|
let key = setup();
|
||||||
|
|
||||||
Client::default()
|
Client::default().torn_api(key).user(|b| b).await.unwrap();
|
||||||
.torn_api(key)
|
|
||||||
.user(None, |b| b)
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "awc")]
|
#[cfg(feature = "awc")]
|
||||||
|
|
|
@ -7,54 +7,48 @@ use crate::{
|
||||||
ApiResponse, DirectExecutor,
|
ApiResponse, DirectExecutor,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct ApiProvider<'a, C, E, I = i32>
|
pub struct ApiProvider<'a, C, E>
|
||||||
where
|
where
|
||||||
C: ApiClient,
|
C: ApiClient,
|
||||||
E: RequestExecutor<C>,
|
E: RequestExecutor<C>,
|
||||||
I: num_traits::AsPrimitive<i64>,
|
|
||||||
{
|
{
|
||||||
client: &'a C,
|
client: &'a C,
|
||||||
executor: E,
|
executor: E,
|
||||||
_marker: std::marker::PhantomData<I>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, C, E, I> ApiProvider<'a, C, E, I>
|
impl<'a, C, E> ApiProvider<'a, C, E>
|
||||||
where
|
where
|
||||||
C: ApiClient,
|
C: ApiClient,
|
||||||
E: RequestExecutor<C>,
|
E: RequestExecutor<C>,
|
||||||
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
|
||||||
i64: num_traits::AsPrimitive<I>,
|
|
||||||
{
|
{
|
||||||
pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E, I> {
|
pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E> {
|
||||||
Self {
|
Self { client, executor }
|
||||||
client,
|
|
||||||
executor,
|
|
||||||
_marker: Default::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn user<F>(&self, id: Option<I>, build: F) -> Result<user::Response, E::Error>
|
pub async fn user<F>(&self, build: F) -> Result<user::Response, E::Error>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
.execute(self.client, builder.request, id.map(|i| i.as_()))
|
.execute(self.client, builder.request, builder.id)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn users<F, L>(
|
pub async fn users<F, L, I>(
|
||||||
&self,
|
&self,
|
||||||
ids: L,
|
ids: L,
|
||||||
build: F,
|
build: F,
|
||||||
) -> HashMap<I, Result<user::Response, E::Error>>
|
) -> HashMap<I, Result<user::Response, E::Error>>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
||||||
|
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
||||||
|
i64: num_traits::AsPrimitive<I>,
|
||||||
L: IntoIterator<Item = I>,
|
L: IntoIterator<Item = I>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
|
@ -69,28 +63,30 @@ where
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn faction<F>(&self, id: Option<I>, build: F) -> Result<faction::Response, E::Error>
|
pub async fn faction<F>(&self, build: F) -> Result<faction::Response, E::Error>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
.execute(self.client, builder.request, id.map(|i| i.as_()))
|
.execute(self.client, builder.request, builder.id)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn factions<F, L>(
|
pub async fn factions<F, L, I>(
|
||||||
&self,
|
&self,
|
||||||
ids: L,
|
ids: L,
|
||||||
build: F,
|
build: F,
|
||||||
) -> HashMap<I, Result<faction::Response, E::Error>>
|
) -> HashMap<I, Result<faction::Response, E::Error>>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
||||||
|
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
||||||
|
i64: num_traits::AsPrimitive<I>,
|
||||||
L: IntoIterator<Item = I>,
|
L: IntoIterator<Item = I>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
|
@ -105,28 +101,30 @@ where
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn torn<F>(&self, id: Option<I>, build: F) -> Result<torn::Response, E::Error>
|
pub async fn torn<F>(&self, build: F) -> Result<torn::Response, E::Error>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
.execute(self.client, builder.request, id.map(|i| i.as_()))
|
.execute(self.client, builder.request, builder.id)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn torns<F, L>(
|
pub async fn torns<F, L, I>(
|
||||||
&self,
|
&self,
|
||||||
ids: L,
|
ids: L,
|
||||||
build: F,
|
build: F,
|
||||||
) -> HashMap<I, Result<torn::Response, E::Error>>
|
) -> HashMap<I, Result<torn::Response, E::Error>>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
||||||
|
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
||||||
|
i64: num_traits::AsPrimitive<I>,
|
||||||
L: IntoIterator<Item = I>,
|
L: IntoIterator<Item = I>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
|
|
|
@ -7,54 +7,48 @@ use crate::{
|
||||||
ApiResponse, DirectExecutor,
|
ApiResponse, DirectExecutor,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct ApiProvider<'a, C, E, I = i32>
|
pub struct ApiProvider<'a, C, E>
|
||||||
where
|
where
|
||||||
C: ApiClient,
|
C: ApiClient,
|
||||||
E: RequestExecutor<C>,
|
E: RequestExecutor<C>,
|
||||||
I: num_traits::AsPrimitive<i64>,
|
|
||||||
{
|
{
|
||||||
client: &'a C,
|
client: &'a C,
|
||||||
executor: E,
|
executor: E,
|
||||||
_marker: std::marker::PhantomData<I>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, C, E, I> ApiProvider<'a, C, E, I>
|
impl<'a, C, E> ApiProvider<'a, C, E>
|
||||||
where
|
where
|
||||||
C: ApiClient,
|
C: ApiClient,
|
||||||
E: RequestExecutor<C>,
|
E: RequestExecutor<C>,
|
||||||
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
|
||||||
i64: num_traits::AsPrimitive<I>,
|
|
||||||
{
|
{
|
||||||
pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E, I> {
|
pub fn new(client: &'a C, executor: E) -> ApiProvider<'a, C, E> {
|
||||||
Self {
|
Self { client, executor }
|
||||||
client,
|
|
||||||
executor,
|
|
||||||
_marker: Default::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn user<F>(&self, id: Option<I>, build: F) -> Result<user::Response, E::Error>
|
pub async fn user<F>(&self, build: F) -> Result<user::Response, E::Error>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
.execute(self.client, builder.request, id.map(|i| i.as_()))
|
.execute(self.client, builder.request, builder.id)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn users<F, L>(
|
pub async fn users<F, L, I>(
|
||||||
&self,
|
&self,
|
||||||
ids: L,
|
ids: L,
|
||||||
build: F,
|
build: F,
|
||||||
) -> HashMap<I, Result<user::Response, E::Error>>
|
) -> HashMap<I, Result<user::Response, E::Error>>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
F: FnOnce(ApiRequestBuilder<user::Response>) -> ApiRequestBuilder<user::Response>,
|
||||||
|
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
||||||
|
i64: num_traits::AsPrimitive<I>,
|
||||||
L: IntoIterator<Item = I>,
|
L: IntoIterator<Item = I>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
|
@ -69,28 +63,30 @@ where
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn faction<F>(&self, id: Option<I>, build: F) -> Result<faction::Response, E::Error>
|
pub async fn faction<F>(&self, build: F) -> Result<faction::Response, E::Error>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
.execute(self.client, builder.request, id.map(|i| i.as_()))
|
.execute(self.client, builder.request, builder.id)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn factions<F, L>(
|
pub async fn factions<F, L, I>(
|
||||||
&self,
|
&self,
|
||||||
ids: L,
|
ids: L,
|
||||||
build: F,
|
build: F,
|
||||||
) -> HashMap<I, Result<faction::Response, E::Error>>
|
) -> HashMap<I, Result<faction::Response, E::Error>>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
F: FnOnce(ApiRequestBuilder<faction::Response>) -> ApiRequestBuilder<faction::Response>,
|
||||||
|
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
||||||
|
i64: num_traits::AsPrimitive<I>,
|
||||||
L: IntoIterator<Item = I>,
|
L: IntoIterator<Item = I>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
|
@ -105,28 +101,30 @@ where
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn torn<F>(&self, id: Option<I>, build: F) -> Result<torn::Response, E::Error>
|
pub async fn torn<F>(&self, build: F) -> Result<torn::Response, E::Error>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
.execute(self.client, builder.request, id.map(|i| i.as_()))
|
.execute(self.client, builder.request, builder.id)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn torns<F, L>(
|
pub async fn torns<F, L, I>(
|
||||||
&self,
|
&self,
|
||||||
ids: L,
|
ids: L,
|
||||||
build: F,
|
build: F,
|
||||||
) -> HashMap<I, Result<torn::Response, E::Error>>
|
) -> HashMap<I, Result<torn::Response, E::Error>>
|
||||||
where
|
where
|
||||||
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
F: FnOnce(ApiRequestBuilder<torn::Response>) -> ApiRequestBuilder<torn::Response>,
|
||||||
|
I: num_traits::AsPrimitive<i64> + std::hash::Hash + std::cmp::Eq,
|
||||||
|
i64: num_traits::AsPrimitive<I>,
|
||||||
L: IntoIterator<Item = I>,
|
L: IntoIterator<Item = I>,
|
||||||
{
|
{
|
||||||
let mut builder = ApiRequestBuilder::new();
|
let mut builder = ApiRequestBuilder::default();
|
||||||
builder = build(builder);
|
builder = build(builder);
|
||||||
|
|
||||||
self.executor
|
self.executor
|
||||||
|
|
|
@ -91,7 +91,7 @@ mod tests {
|
||||||
|
|
||||||
let response = Client::default()
|
let response = Client::default()
|
||||||
.torn_api(key)
|
.torn_api(key)
|
||||||
.torn(None, |b| b.selections(&[Selection::Competition]))
|
.torn(|b| b.selections(&[Selection::Competition]))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
|
@ -399,7 +399,7 @@ mod tests {
|
||||||
|
|
||||||
let response = Client::default()
|
let response = Client::default()
|
||||||
.torn_api(key)
|
.torn_api(key)
|
||||||
.user(None, |b| {
|
.user(|b| {
|
||||||
b.selections(&[
|
b.selections(&[
|
||||||
Selection::Basic,
|
Selection::Basic,
|
||||||
Selection::Discord,
|
Selection::Discord,
|
||||||
|
@ -424,7 +424,7 @@ mod tests {
|
||||||
|
|
||||||
let response = Client::default()
|
let response = Client::default()
|
||||||
.torn_api(key)
|
.torn_api(key)
|
||||||
.user(Some(28), |b| b.selections(&[Selection::Profile]))
|
.user(|b| b.id(28).selections(&[Selection::Profile]))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -439,7 +439,7 @@ mod tests {
|
||||||
|
|
||||||
let response = Client::default()
|
let response = Client::default()
|
||||||
.torn_api(key)
|
.torn_api(key)
|
||||||
.user(None, |b| b.selections(&[Selection::Profile]))
|
.user(|b| b.selections(&[Selection::Profile]))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -453,10 +453,27 @@ mod tests {
|
||||||
|
|
||||||
let response = Client::default()
|
let response = Client::default()
|
||||||
.torn_api(key)
|
.torn_api(key)
|
||||||
.users([1, 2111649], |b| b.selections(&[Selection::Basic]))
|
.users([1, 2111649, 374272176892674048i64], |b| {
|
||||||
|
b.selections(&[Selection::Basic])
|
||||||
|
})
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
response.get(&1).as_ref().unwrap().as_ref().unwrap();
|
response.get(&1).as_ref().unwrap().as_ref().unwrap();
|
||||||
response.get(&2111649).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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue