mutiny_rs/builders/
edit_message.rs1use crate::builders::create_embed::SendableEmbed;
2use crate::context::Context;
3use crate::http::HttpError;
4use serde::Serialize;
5use crate::http::routing::Route;
6use crate::model::message::Message;
7
8#[derive(Serialize, Default)]
9pub struct EditMessagePayload {
10 pub content: Option<String>,
11 pub embeds: Option<Vec<SendableEmbed>>,
12}
13pub struct EditMessageBuilder<'a> {
14 pub(crate) message: &'a Message,
15 pub(crate) ctx: &'a Context,
16 pub(crate) content: Option<String>,
17 pub(crate) embeds: Option<Vec<SendableEmbed>>,
18}
19
20
21impl<'a> EditMessageBuilder<'a> {
22 pub fn new(message: &'a Message, ctx: &'a Context) -> Self {
23 Self {
24 message,
25 ctx,
26 content: None,
27 embeds: None,
28 }
29 }
30
31 pub fn content(mut self, content: impl Into<String>) -> Self {
32 self.content = Some(content.into());
33 self
34 }
35
36 pub fn embeds(mut self, embeds: Vec<SendableEmbed>) -> Self {
37 self.embeds = Some(embeds);
38 self
39 }
40
41 pub async fn edit(self, body: EditMessagePayload) -> Result<Message, HttpError> {
42 let route = Route::EditMessage { channel_id: &self.message.channel.0, message_id: &self.message.id };
43 let message = self.ctx.http.execute::<EditMessagePayload, Message>(route, body).await?;
44 self.ctx.cache.messages.insert(message.id.clone(), message.clone()).await;
45 Ok(message)
46 }
47}