teloxide_core/requests/
multipart_payload.rs1use crate::{
2 payloads,
3 requests::Payload,
4 types::{InputFile, InputFileLike, InputMedia, InputPaidMedia, InputSticker},
5};
6
7pub trait MultipartPayload: Payload {
10 fn copy_files(&self, into: &mut dyn FnMut(InputFile));
11
12 fn move_files(&mut self, into: &mut dyn FnMut(InputFile));
13}
14
15impl MultipartPayload for payloads::SendPaidMedia {
16 fn copy_files(&self, into: &mut dyn FnMut(InputFile)) {
17 self.media.iter().flat_map(InputPaidMedia::files).for_each(|f| f.copy_into(into))
18 }
19
20 fn move_files(&mut self, into: &mut dyn FnMut(InputFile)) {
21 self.media.iter_mut().flat_map(InputPaidMedia::files_mut).for_each(|f| f.move_into(into))
22 }
23}
24
25impl MultipartPayload for payloads::SendMediaGroup {
26 fn copy_files(&self, into: &mut dyn FnMut(InputFile)) {
27 self.media.iter().flat_map(InputMedia::files).for_each(|f| f.copy_into(into))
28 }
29
30 fn move_files(&mut self, into: &mut dyn FnMut(InputFile)) {
31 self.media.iter_mut().flat_map(InputMedia::files_mut).for_each(|f| f.move_into(into))
32 }
33}
34
35impl MultipartPayload for payloads::EditMessageMedia {
36 fn copy_files(&self, into: &mut dyn FnMut(InputFile)) {
37 self.media.files().for_each(|f| f.copy_into(into))
38 }
39
40 fn move_files(&mut self, into: &mut dyn FnMut(InputFile)) {
41 self.media.files_mut().for_each(|f| f.move_into(into))
42 }
43}
44
45impl MultipartPayload for payloads::EditMessageMediaInline {
46 fn copy_files(&self, into: &mut dyn FnMut(InputFile)) {
47 self.media.files().for_each(|f| f.copy_into(into))
48 }
49
50 fn move_files(&mut self, into: &mut dyn FnMut(InputFile)) {
51 self.media.files_mut().for_each(|f| f.move_into(into))
52 }
53}
54
55impl MultipartPayload for payloads::CreateNewStickerSet {
56 fn copy_files(&self, into: &mut dyn FnMut(InputFile)) {
57 self.stickers
58 .iter()
59 .for_each(|InputSticker { sticker: f, .. }: &InputSticker| f.copy_into(into))
60 }
61
62 fn move_files(&mut self, into: &mut dyn FnMut(InputFile)) {
63 self.stickers
64 .iter_mut()
65 .for_each(|InputSticker { sticker: f, .. }: &mut InputSticker| f.move_into(into))
66 }
67}