twilight_http/request/guild/
update_guild_welcome_screen.rs1use crate::{
2 client::Client,
3 error::Error,
4 request::{Request, TryIntoRequest},
5 response::{Response, ResponseFuture},
6 routing::Route,
7};
8use serde::Serialize;
9use std::future::IntoFuture;
10use twilight_model::{
11 guild::invite::{WelcomeScreen, WelcomeScreenChannel},
12 id::{marker::GuildMarker, Id},
13};
14
15#[derive(Serialize)]
16struct UpdateGuildWelcomeScreenFields<'a> {
17 #[serde(skip_serializing_if = "Option::is_none")]
18 description: Option<&'a str>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 enabled: Option<bool>,
21 #[serde(skip_serializing_if = "<[_]>::is_empty")]
22 welcome_channels: &'a [WelcomeScreenChannel],
23}
24
25#[must_use = "requests must be configured and executed"]
31pub struct UpdateGuildWelcomeScreen<'a> {
32 fields: UpdateGuildWelcomeScreenFields<'a>,
33 guild_id: Id<GuildMarker>,
34 http: &'a Client,
35}
36
37impl<'a> UpdateGuildWelcomeScreen<'a> {
38 pub(crate) const fn new(http: &'a Client, guild_id: Id<GuildMarker>) -> Self {
39 Self {
40 fields: UpdateGuildWelcomeScreenFields {
41 description: None,
42 enabled: None,
43 welcome_channels: &[],
44 },
45 guild_id,
46 http,
47 }
48 }
49
50 pub const fn description(mut self, description: &'a str) -> Self {
52 self.fields.description = Some(description);
53
54 self
55 }
56
57 pub const fn enabled(mut self, enabled: bool) -> Self {
59 self.fields.enabled = Some(enabled);
60
61 self
62 }
63
64 pub const fn welcome_channels(mut self, welcome_channels: &'a [WelcomeScreenChannel]) -> Self {
66 self.fields.welcome_channels = welcome_channels;
67
68 self
69 }
70}
71
72impl IntoFuture for UpdateGuildWelcomeScreen<'_> {
73 type Output = Result<Response<WelcomeScreen>, Error>;
74
75 type IntoFuture = ResponseFuture<WelcomeScreen>;
76
77 fn into_future(self) -> Self::IntoFuture {
78 let http = self.http;
79
80 match self.try_into_request() {
81 Ok(request) => http.request(request),
82 Err(source) => ResponseFuture::error(source),
83 }
84 }
85}
86
87impl TryIntoRequest for UpdateGuildWelcomeScreen<'_> {
88 fn try_into_request(self) -> Result<Request, Error> {
89 Request::builder(&Route::UpdateGuildWelcomeScreen {
90 guild_id: self.guild_id.get(),
91 })
92 .json(&self.fields)
93 .build()
94 }
95}