neptunium_http/endpoints/channel/messages/
edit_message.rs1use 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}