Skip to main content

neptunium_http/endpoints/channel/messages/
edit_message.rs

1use bon::Builder;
2use neptunium_model::{
3    channel::message::{Message, MessageFlags, embed::MessageEmbed},
4    id::{
5        Id,
6        marker::{ChannelMarker, MessageMarker},
7    },
8};
9use reqwest::Method;
10use serde::Serialize;
11
12use crate::{
13    endpoints::{
14        Endpoint,
15        channel::messages::{allowed_mentions::AllowedMentions, attachment::AttachmentRequest},
16    },
17    request::Request,
18};
19
20#[derive(Serialize, Clone, Debug, Builder)]
21pub struct EditMessageBody {
22    #[builder(into)]
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub content: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub embeds: Option<Vec<MessageEmbed>>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub attachments: Option<Vec<AttachmentRequest>>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub allowed_mentions: Option<AllowedMentions>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub flags: Option<MessageFlags>,
33}
34
35#[derive(Builder, Clone, Debug)]
36pub struct EditMessage {
37    pub channel_id: Id<ChannelMarker>,
38    pub message_id: Id<MessageMarker>,
39    pub body: EditMessageBody,
40}
41
42impl Endpoint for EditMessage {
43    type Response = Message;
44
45    fn into_request(self) -> crate::request::Request {
46        Request::builder()
47            .method(Method::PATCH)
48            .path(format!(
49                "/channels/{}/messages/{}",
50                self.channel_id, self.message_id
51            ))
52            .body(serde_json::to_string(&self.body).unwrap())
53            .build()
54    }
55}