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