diff --git a/src/requests/form_builder.rs b/src/requests/form_builder.rs index 01092e68..d14f0729 100644 --- a/src/requests/form_builder.rs +++ b/src/requests/form_builder.rs @@ -33,8 +33,8 @@ impl FormBuilder { Self { form: self.form.text(name, string) } } Some(FormValue::File(path)) => self.add_file(name, path).await, - Some(FormValue::Memory(data)) => { - self.add_file_from_memory(name, data) + Some(FormValue::Memory { file_name, data }) => { + self.add_file_from_memory(name, file_name, data) } None => self, } @@ -53,16 +53,20 @@ impl FormBuilder { } } - fn add_file_from_memory<'a, N>(self, name: N, data: Vec<u8>) -> Self + fn add_file_from_memory<'a, N>( + self, + name: N, + file_name: String, + data: Vec<u8>, + ) -> Self where N: Into<Cow<'a, str>>, { - let name = name.into().into_owned(); - Self { - form: self - .form - .part(name.clone(), file_from_memory_to_part(data, name)), + form: self.form.part( + name.into().into_owned(), + file_from_memory_to_part(data, file_name), + ), } } @@ -73,7 +77,7 @@ impl FormBuilder { pub(crate) enum FormValue { File(PathBuf), - Memory(Vec<u8>), + Memory { file_name: String, data: Vec<u8> }, Str(String), } @@ -170,7 +174,10 @@ impl IntoFormValue for InputFile { fn into_form_value(&self) -> Option<FormValue> { match self { InputFile::File(path) => Some(FormValue::File(path.clone())), - InputFile::Memory(data) => Some(FormValue::Memory(data.clone())), + InputFile::Memory { file_name, data } => Some(FormValue::Memory { + file_name: file_name.clone(), + data: data.clone(), + }), InputFile::Url(url) => Some(FormValue::Str(url.clone())), InputFile::FileId(file_id) => Some(FormValue::Str(file_id.clone())), } diff --git a/src/types/input_file.rs b/src/types/input_file.rs index 4d2d57ae..149f3d21 100644 --- a/src/types/input_file.rs +++ b/src/types/input_file.rs @@ -8,7 +8,7 @@ use std::path::PathBuf; #[derive(Clone, Debug, Eq, Hash, PartialEq, Deserialize)] pub enum InputFile { File(PathBuf), - Memory(Vec<u8>), + Memory { file_name: String, data: Vec<u8> }, Url(String), FileId(String), } @@ -21,11 +21,12 @@ impl InputFile { Self::File(path.into()) } - pub fn memory<D>(data: D) -> Self + pub fn memory<S, D>(file_name: S, data: D) -> Self where + S: Into<String>, D: Into<Vec<u8>>, { - Self::Memory(data.into()) + Self::Memory { file_name: file_name.into(), data: data.into() } } pub fn url<T>(url: T) -> Self @@ -90,7 +91,7 @@ impl Serialize for InputFile { ), ) } - InputFile::Memory(data) => { + InputFile::Memory { data, .. } => { // NOTE: file should be actually attached with // multipart/form-data serializer.serialize_str(&format!(