neptunium_http/endpoints/guild/
update_guild_settings.rs1use bon::Builder;
2use neptunium_model::{
3 guild::{
4 Guild,
5 properties::{
6 DefaultMessageNotifications, GuildExplicitContentFilter, GuildFeatureFlag,
7 GuildMfaLevel, GuildVerificationLevel, NsfwLevel, SplashCardAlignment,
8 SystemChannelFlags,
9 },
10 },
11 id::{
12 Id,
13 marker::{ChannelMarker, GuildMarker},
14 },
15 misc::ImageHash,
16 time::timestamp::{Timestamp, representations::Iso8601},
17};
18use reqwest::Method;
19use serde::Serialize;
20
21use crate::{endpoints::Endpoint, request::Request};
22
23#[derive(Builder, Serialize, Clone, Debug)]
24pub struct UpdateGuildSettingsBody {
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub name: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub icon: Option<ImageHash>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub system_channel_id: Option<Id<ChannelMarker>>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub system_channel_flags: Option<SystemChannelFlags>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub afk_channel_id: Option<Id<ChannelMarker>>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub afk_timeout: Option<u32>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub default_message_notifications: Option<DefaultMessageNotifications>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub verification_level: Option<GuildVerificationLevel>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub mfa_level: Option<GuildMfaLevel>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub nsfw_level: Option<NsfwLevel>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub explicit_content_filter: Option<GuildExplicitContentFilter>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub banner: Option<String>,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub splash: Option<String>,
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub embed_splash: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub splash_card_alignment: Option<SplashCardAlignment>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub features: Option<Vec<GuildFeatureFlag>>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub message_history_cutoff: Option<Timestamp<Iso8601>>,
62}
63
64#[derive(Builder, Clone, Debug)]
65pub struct UpdateGuildSettings {
66 pub guild_id: Id<GuildMarker>,
67 pub body: UpdateGuildSettingsBody,
68}
69
70impl Endpoint for UpdateGuildSettings {
71 type Response = Guild;
72
73 fn into_request(self) -> crate::request::Request {
74 Request::builder()
75 .method(Method::PATCH)
76 .body(serde_json::to_string(&self.body).unwrap())
77 .path(format!("/guilds/{}", self.guild_id))
78 .build()
79 }
80}