modio/request/mods/dependencies/
delete_mod_dependencies.rs1use std::future::IntoFuture;
2
3use serde_derive::Serialize;
4
5use crate::client::Client;
6use crate::request::{ArrayParams, Output, RequestBuilder, Route};
7use crate::response::{NoContent, ResponseFuture};
8use crate::types::id::{GameId, ModId};
9
10pub struct DeleteModDependencies<'a> {
12 http: &'a Client,
13 game_id: GameId,
14 mod_id: ModId,
15 fields: DeleteModDependenciesFields<'a>,
16}
17
18#[derive(Serialize)]
19struct DeleteModDependenciesFields<'a> {
20 #[serde(flatten)]
21 dependencies: ArrayParams<'a, ModId>,
22}
23
24impl<'a> DeleteModDependenciesFields<'a> {
25 const fn new(deps: &'a [ModId]) -> Self {
26 Self {
27 dependencies: ArrayParams::new("dependencies[]", deps),
28 }
29 }
30}
31
32impl<'a> DeleteModDependencies<'a> {
33 pub(crate) const fn new(
34 http: &'a Client,
35 game_id: GameId,
36 mod_id: ModId,
37 deps: &'a [ModId],
38 ) -> Self {
39 Self {
40 http,
41 game_id,
42 mod_id,
43 fields: DeleteModDependenciesFields::new(deps),
44 }
45 }
46}
47
48impl IntoFuture for DeleteModDependencies<'_> {
49 type Output = Output<NoContent>;
50 type IntoFuture = ResponseFuture<NoContent>;
51
52 fn into_future(self) -> Self::IntoFuture {
53 let route = Route::DeleteModDependencies {
54 game_id: self.game_id,
55 mod_id: self.mod_id,
56 };
57 match RequestBuilder::from_route(&route).form(&self.fields) {
58 Ok(req) => self.http.request(req),
59 Err(err) => ResponseFuture::failed(err),
60 }
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use serde_test::{assert_ser_tokens, Token};
67
68 use super::{DeleteModDependenciesFields, ModId};
69
70 #[test]
71 pub fn serialize_fields() {
72 let deps = [ModId::new(1), ModId::new(2)];
73 let fields = DeleteModDependenciesFields::new(&deps);
74
75 assert_ser_tokens(
76 &fields,
77 &[
78 Token::Map { len: None },
79 Token::Str("dependencies[]"),
80 Token::U64(1),
81 Token::Str("dependencies[]"),
82 Token::U64(2),
83 Token::MapEnd,
84 ],
85 );
86
87 let qs = serde_urlencoded::to_string(&fields).unwrap();
88 assert_eq!("dependencies%5B%5D=1&dependencies%5B%5D=2", qs);
89 }
90}