From 3999e6dbc8f84e011cee599752b8b1a2d08540a4 Mon Sep 17 00:00:00 2001 From: Waffle Date: Sun, 13 Oct 2019 13:32:59 +0300 Subject: [PATCH] Split `request_multipart` into self (that always accept `Form`) and `request_simple`, simplify `SendMediaGroup::send` --- src/network/mod.rs | 2 +- src/network/request.rs | 30 +++++++++++++++++++-------- src/requests/get_me.rs | 8 +------- src/requests/send_audio.rs | 2 +- src/requests/send_media_group.rs | 35 ++++++++++++-------------------- src/requests/send_photo.rs | 2 +- 6 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/network/mod.rs b/src/network/mod.rs index 1461304f..07b49147 100644 --- a/src/network/mod.rs +++ b/src/network/mod.rs @@ -3,7 +3,7 @@ pub use download::download_file_stream; pub use self::{ download::download_file, - request::{request_json, request_multipart}, + request::{request_json, request_multipart, request_simple}, telegram_response::TelegramResponse, }; diff --git a/src/network/request.rs b/src/network/request.rs index ac97c612..0222fad2 100644 --- a/src/network/request.rs +++ b/src/network/request.rs @@ -1,4 +1,3 @@ -use apply::Apply; use reqwest::{multipart::Form, Client, Response}; use serde::{de::DeserializeOwned, Serialize}; @@ -10,18 +9,33 @@ pub async fn request_multipart( client: &Client, token: &str, method_name: &str, - params: Option
, + params: Form, ) -> ResponseResult -where - T: DeserializeOwned, + where + T: DeserializeOwned, +{ + process_response( + client + .post(&super::method_url(TELEGRAM_API_URL, token, method_name)) + .multipart(params) + .send() + .await + .map_err(RequestError::NetworkError)?, + ) + .await +} + +pub async fn request_simple( + client: &Client, + token: &str, + method_name: &str, +) -> ResponseResult + where + T: DeserializeOwned, { process_response( client .post(&super::method_url(TELEGRAM_API_URL, token, method_name)) - .apply(|request_builder| match params { - Some(params) => request_builder.multipart(params), - None => request_builder, - }) .send() .await .map_err(RequestError::NetworkError)?, diff --git a/src/requests/get_me.rs b/src/requests/get_me.rs index 6d8b1428..a33c0382 100644 --- a/src/requests/get_me.rs +++ b/src/requests/get_me.rs @@ -24,13 +24,7 @@ impl Request for GetMe<'_> { impl GetMe<'_> { pub async fn send(self) -> ResponseResult { - network::request_multipart( - self.ctx.client, - self.ctx.token, - "getMe", - None, - ) - .await + network::request_simple(self.ctx.client, self.ctx.token, "getMe").await } } diff --git a/src/requests/send_audio.rs b/src/requests/send_audio.rs index ae989024..b41ff0b0 100644 --- a/src/requests/send_audio.rs +++ b/src/requests/send_audio.rs @@ -107,7 +107,7 @@ impl SendAudio<'_> { &self.ctx.client, &self.ctx.token, "sendAudio", - Some(params), + params, ) .await } diff --git a/src/requests/send_media_group.rs b/src/requests/send_media_group.rs index 6f5e5463..4e81ab61 100644 --- a/src/requests/send_media_group.rs +++ b/src/requests/send_media_group.rs @@ -1,5 +1,3 @@ -use apply::Apply; - use async_trait::async_trait; use crate::{ @@ -7,7 +5,7 @@ use crate::{ requests::{ form_builder::FormBuilder, Request, RequestContext, ResponseResult, }, - types::{ChatId, InputFile, InputMedia, Message}, + types::{ChatId, InputMedia, Message}, }; /// Use this method to send a group of photos or videos as an album. @@ -33,23 +31,8 @@ impl Request for SendMediaGroup<'_> { impl SendMediaGroup<'_> { pub async fn send(self) -> ResponseResult> { - let params = FormBuilder::new() + let form = FormBuilder::new() .add("chat_id", &self.chat_id) - .apply(|form| { - self.media - .iter() - .map(|e| e.media()) - .fold(form, |acc, file| { - if let InputFile::File(path) = file { - acc.add_file( - &path.file_name().unwrap().to_string_lossy(), - path, - ) - } else { - acc - } - }) - }) .add("media", &self.media) .add_if_some( "disable_notification", @@ -58,13 +41,21 @@ impl SendMediaGroup<'_> { .add_if_some( "reply_to_message_id", self.reply_to_message_id.as_ref(), - ) - .build(); + ); + + let form = self.media.iter().filter_map(|e| e.media().as_file()) + .fold(form, |acc, path| + acc.add_file( + &path.file_name().unwrap().to_string_lossy(), + path, + ) + ); + request_multipart( &self.ctx.client, &self.ctx.token, "sendMediaGroup", - Some(params), + form.build(), ) .await } diff --git a/src/requests/send_photo.rs b/src/requests/send_photo.rs index db3ca718..939510b2 100644 --- a/src/requests/send_photo.rs +++ b/src/requests/send_photo.rs @@ -79,7 +79,7 @@ impl SendPhoto<'_> { &self.ctx.client, &self.ctx.token, "sendPhoto", - Some(params), + params, ) .await }