use crate::id::{
marker::{EmojiMarker, TagMarker},
Id,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct DefaultReaction {
pub emoji_id: Option<Id<EmojiMarker>>,
pub emoji_name: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct ForumTag {
pub emoji_id: Option<Id<EmojiMarker>>,
pub emoji_name: Option<String>,
pub id: Id<TagMarker>,
pub moderated: bool,
pub name: String,
}
#[cfg(test)]
mod tests {
use super::{DefaultReaction, ForumTag};
use crate::id::{
marker::{EmojiMarker, TagMarker},
Id,
};
use serde_test::Token;
const EMOJI_ID: Id<EmojiMarker> = Id::new(1);
const TAG_ID: Id<TagMarker> = Id::new(2);
#[test]
fn default_reaction() {
let value = DefaultReaction {
emoji_id: None,
emoji_name: Some("name".to_owned()),
};
serde_test::assert_tokens(
&value,
&[
Token::Struct {
name: "DefaultReaction",
len: 2,
},
Token::Str("emoji_id"),
Token::None,
Token::Str("emoji_name"),
Token::Some,
Token::Str("name"),
Token::StructEnd,
],
);
}
#[test]
fn forum_tag() {
let value = ForumTag {
emoji_id: Some(EMOJI_ID),
emoji_name: None,
id: TAG_ID,
moderated: false,
name: "other".into(),
};
serde_test::assert_tokens(
&value,
&[
Token::Struct {
name: "ForumTag",
len: 5,
},
Token::Str("emoji_id"),
Token::Some,
Token::NewtypeStruct { name: "Id" },
Token::Str("1"),
Token::Str("emoji_name"),
Token::None,
Token::Str("id"),
Token::NewtypeStruct { name: "Id" },
Token::Str("2"),
Token::Str("moderated"),
Token::Bool(false),
Token::Str("name"),
Token::Str("other"),
Token::StructEnd,
],
);
}
}