Skip to main content

neptunium_http/endpoints/guild/
update_guild_settings.rs

1use 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    /// Hash of the guild icon
28    #[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    /// Base64-encoded image data for the guild splash screen.
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub splash: Option<String>,
53    /// Base64-encoded image data for the embedded invite splash.
54    #[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}