mutiny-rs 0.5.1

A Rust API wrapper for the Stoat chat platform.
Documentation
use crate::builders::create_embed::SendableEmbed;
use crate::context::Context;
use crate::http::HttpError;
use serde::Serialize;
use crate::http::routing::Route;
use crate::model::message::Message;

#[derive(Serialize, Default)]
pub struct EditMessagePayload {
    pub content: Option<String>,
    pub embeds: Option<Vec<SendableEmbed>>,
}
pub struct EditMessageBuilder<'a> {
    pub(crate) message: &'a Message,
    pub(crate) ctx: &'a Context,
    pub(crate) content: Option<String>,
    pub(crate) embeds: Option<Vec<SendableEmbed>>,
}


impl<'a> EditMessageBuilder<'a> {
    pub fn new(message: &'a Message, ctx: &'a Context) -> Self {
        Self {
            message,
            ctx,
            content: None,
            embeds: None,
        }
    }

    pub fn content(mut self, content: impl Into<String>) -> Self {
        self.content = Some(content.into());
        self
    }

    pub fn embeds(mut self, embeds: Vec<SendableEmbed>) -> Self {
        self.embeds = Some(embeds);
        self
    }

    pub async fn edit(self, body: EditMessagePayload) -> Result<Message, HttpError> {
        let route = Route::EditMessage { channel_id: &self.message.channel.0, message_id: &self.message.id };
        let message = self.ctx.http.execute::<EditMessagePayload, Message>(route, body).await?;
        self.ctx.cache.messages.insert(message.id.clone(), message.clone()).await;
        Ok(message)
    }
}