mutiny-rs 0.3.2

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::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 url = format!("/channels/{}/messages/{}", self.message.channel, self.message.id);
        let message = self.ctx.http.patch::<Message, EditMessagePayload>(&url, &body).await?;
        self.ctx.cache.messages.insert(message.id.clone(), message.clone()).await;
        Ok(message)
    }
}