neptunium_http/endpoints/guild/members/
update_guild_member.rs1use bon::Builder;
2use neptunium_model::{
3 guild::member::GuildMember,
4 id::{
5 Id,
6 marker::{ChannelMarker, GuildMarker, RoleMarker, UserMarker},
7 },
8 time::timestamp::{Timestamp, representations::Iso8601},
9};
10use reqwest::Method;
11use serde::Serialize;
12
13use crate::{endpoints::Endpoint, request::Request};
14
15#[derive(Serialize, Clone, Debug, Builder)]
16pub struct UpdateGuildMemberBody {
17 #[builder(into)]
18 pub nick: Option<String>,
19 #[builder(into)]
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub roles: Option<Vec<Id<RoleMarker>>>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub mute: Option<bool>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub deaf: Option<bool>,
26 #[serde(skip_serializing_if = "Option::is_none")]
29 pub communication_disabled_until: Option<Option<Timestamp<Iso8601>>>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 #[builder(into)]
32 pub timeout_reason: Option<String>,
33 #[serde(skip_serializing_if = "Option::is_none", rename = "channel_id")]
36 pub voice_channel_id: Option<Id<ChannelMarker>>,
37 #[serde(skip_serializing_if = "Option::is_none", rename = "connection_id")]
38 pub voice_connection_id: Option<String>,
39}
40
41#[derive(Builder, Clone, Debug)]
42pub struct UpdateGuildMember {
43 pub guild_id: Id<GuildMarker>,
44 pub user_id: Id<UserMarker>,
45 pub body: UpdateGuildMemberBody,
46}
47
48impl Endpoint for UpdateGuildMember {
49 type Response = GuildMember;
50
51 fn into_request(self) -> crate::request::Request {
52 Request::builder()
53 .method(Method::PATCH)
54 .body(serde_json::to_string(&self.body).unwrap())
55 .path(format!(
56 "/guilds/{}/members/{}",
57 self.guild_id, self.user_id
58 ))
59 .build()
60 }
61}