use serde::Deserialize;
use time::OffsetDateTime;
use crate::model::user::Username;
use super::{CacheUserFn, ContainedUsers};
#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
pub enum KudosuAction {
#[serde(rename = "recalculate.reset")]
RecalculateReset,
#[serde(rename = "vote.give")]
VoteGive,
#[serde(rename = "vote.revoke")]
VoteRevoke,
#[serde(rename = "vote.reset")]
VoteReset,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
pub struct KudosuGiver {
pub url: String,
pub username: Username,
}
#[derive(Clone, Debug, Deserialize)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
pub struct KudosuHistory {
pub id: u32,
pub action: KudosuAction,
pub amount: i32,
pub model: String,
#[serde(with = "super::serde_util::datetime")]
pub created_at: OffsetDateTime,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub giver: Option<KudosuGiver>,
pub post: KudosuPost,
}
impl ContainedUsers for KudosuHistory {
fn apply_to_users(&self, _: impl CacheUserFn) {}
}
impl PartialEq for KudosuHistory {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.id == other.id
}
}
impl Eq for KudosuHistory {}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
pub struct KudosuPost {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
pub title: String,
}