use crate::models::Snowflake;
use serde::Serialize;
use serde_json::Value;
use super::{Emoji, MessageReaction, ReactionTarget};
#[derive(Debug, Clone, Serialize)]
pub struct Reaction {
pub user_id: Snowflake,
pub channel_id: Snowflake,
pub guild_id: Snowflake,
pub emoji: Emoji,
pub target: ReactionTarget,
#[serde(skip)]
pub event_id: Option<String>,
}
impl Reaction {
pub(crate) fn new(event_id: Option<String>, data: &Value) -> crate::Result<Self> {
let message_reaction = serde_json::from_value(data.clone())?;
Ok(Self::from_message_reaction(event_id, message_reaction))
}
pub(crate) fn from_message_reaction(
event_id: Option<String>,
message_reaction: MessageReaction,
) -> Self {
Self {
event_id,
user_id: message_reaction.user_id,
channel_id: message_reaction.channel_id,
guild_id: message_reaction.guild_id,
emoji: message_reaction.emoji,
target: message_reaction.target,
}
}
}