modio/request/games/
add_game_media.rs1use std::future::IntoFuture;
2use std::path::Path;
3
4use crate::client::Client;
5use crate::request::multipart::{Form, Part};
6use crate::request::{Output, RequestBuilder, Route};
7use crate::response::ResponseFuture;
8use crate::types::id::GameId;
9use crate::types::Message;
10
11pub struct AddGameMedia<'a> {
13 http: &'a Client,
14 game_id: GameId,
15 logo: Option<Part>,
16 icon: Option<Part>,
17 header: Option<Part>,
18}
19
20impl<'a> AddGameMedia<'a> {
21 pub(crate) const fn new(http: &'a Client, game_id: GameId) -> Self {
22 Self {
23 http,
24 game_id,
25 logo: None,
26 icon: None,
27 header: None,
28 }
29 }
30
31 pub fn logo<P: AsRef<Path>>(mut self, file: P) -> Self {
32 let part = Part::file(file, "logo.png").mime(mime::IMAGE_STAR);
33 self.logo = Some(part);
34 self
35 }
36
37 pub fn icon<P: AsRef<Path>>(mut self, file: P) -> Self {
38 let part = Part::file(file, "icon.png").mime(mime::IMAGE_STAR);
39 self.icon = Some(part);
40 self
41 }
42
43 pub fn header<P: AsRef<Path>>(mut self, file: P) -> Self {
44 let part = Part::file(file, "header.png").mime(mime::IMAGE_STAR);
45 self.header = Some(part);
46 self
47 }
48}
49
50impl IntoFuture for AddGameMedia<'_> {
51 type Output = Output<Message>;
52 type IntoFuture = ResponseFuture<Message>;
53
54 fn into_future(self) -> Self::IntoFuture {
55 let route = Route::AddGameMedia {
56 game_id: self.game_id,
57 };
58
59 let mut form = Form::new();
60 if let Some(value) = self.logo {
61 form = form.part("logo", value);
62 }
63 if let Some(value) = self.icon {
64 form = form.part("icon", value);
65 }
66 if let Some(value) = self.header {
67 form = form.part("header", value);
68 }
69
70 match RequestBuilder::from_route(&route).multipart(form) {
71 Ok(req) => self.http.request(req),
72 Err(err) => ResponseFuture::failed(err),
73 }
74 }
75}