mirror of
https://github.com/teloxide/teloxide.git
synced 2024-12-22 14:35:36 +01:00
added .add_file()
This commit is contained in:
parent
88ec897751
commit
2cb6ba9e33
3 changed files with 42 additions and 2 deletions
|
@ -13,5 +13,5 @@ serde = {version = "1.0.92", features = ["derive"] }
|
|||
lazy_static = "1.3"
|
||||
apply = "0.2.2"
|
||||
derive_more = "0.15.0"
|
||||
|
||||
tokio = "0.1"
|
||||
bytes = "0.4.12"
|
|
@ -2,6 +2,7 @@ use reqwest::r#async::multipart::Form;
|
|||
use serde::Serialize;
|
||||
use crate::core::types::ParseMode;
|
||||
use crate::core::requests::ChatId;
|
||||
use crate::core::requests::utils;
|
||||
|
||||
/// This is a convenient struct that builds `reqwest::r#async::multipart::Form`
|
||||
/// from scratch.
|
||||
|
@ -37,6 +38,12 @@ impl FormBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn add_file(self, name: &str, path_to_file: &String) -> Self {
|
||||
Self {
|
||||
form: self.form.part(name.to_owned(), utils::file_to_part(path_to_file))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn build(self) -> Form {
|
||||
self.form
|
||||
}
|
||||
|
@ -85,3 +92,9 @@ impl ToFormValue for ChatId {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ToFormValue for String {
|
||||
fn to_form_value(&self) -> String {
|
||||
self.to_owned()
|
||||
}
|
||||
}
|
||||
|
|
27
src/core/requests/utils.rs
Normal file
27
src/core/requests/utils.rs
Normal file
|
@ -0,0 +1,27 @@
|
|||
use tokio::codec::FramedRead;
|
||||
use std::fs::File;
|
||||
use bytes::{Bytes, BytesMut};
|
||||
use tokio::prelude::*;
|
||||
use reqwest::r#async::multipart::Part;
|
||||
|
||||
struct FileDecoder;
|
||||
|
||||
impl tokio::codec::Decoder for FileDecoder {
|
||||
type Item = Bytes;
|
||||
type Error = std::io::Error;
|
||||
|
||||
fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
||||
if src.is_empty() {
|
||||
return Ok(None)
|
||||
}
|
||||
Ok(Some(src.take().freeze()))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn file_to_part(path_to_file: &String) -> Part {
|
||||
let file = tokio::fs::File::open(path_to_file.clone())
|
||||
.map(|file| FramedRead::new(file, FileDecoder))
|
||||
.flatten_stream();
|
||||
let part = Part::stream(file).file_name("file");
|
||||
part
|
||||
}
|
Loading…
Reference in a new issue