mutiny-rs 0.2.0

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 crate::model::message::Message;
use serde::Serialize;
#[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 send(self) -> Result<Message, HttpError> {
        let url = format!("/channels/{}/messages/{}", self.message.channel, self.message.id);

        let payload = EditMessagePayload {
            content: self.content,
            embeds: self.embeds,
        };

        let payload_json = serde_json::to_value(&payload)
            .map_err(|e| HttpError::Other(format!("Failed to serialize payload: {}", e)))?;

        self.ctx.http.patch(&url, &payload_json).await
    }
}