1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use serde::Serialize;
use twilight_model::{
guild::Emoji,
id::{EmojiId, RoleId, UserId},
};
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct CachedEmoji {
pub id: EmojiId,
pub animated: bool,
pub name: String,
pub managed: bool,
pub require_colons: bool,
pub roles: Vec<RoleId>,
pub user_id: Option<UserId>,
pub available: bool,
}
impl PartialEq<Emoji> for CachedEmoji {
fn eq(&self, other: &Emoji) -> bool {
self.id == other.id
&& self.animated == other.animated
&& self.managed == other.managed
&& self.name == other.name
&& self.require_colons == other.require_colons
&& self.roles == other.roles
&& self.user_id == other.user.as_ref().map(|user| user.id)
&& self.available == other.available
}
}
#[cfg(test)]
mod tests {
use super::CachedEmoji;
use static_assertions::{assert_fields, assert_impl_all};
use std::fmt::Debug;
use twilight_model::{guild::Emoji, id::EmojiId};
assert_fields!(
CachedEmoji: id,
animated,
name,
managed,
require_colons,
roles,
user_id
);
assert_impl_all!(CachedEmoji: Clone, Debug, Eq, PartialEq);
#[test]
fn test_eq_emoji() {
let emoji = Emoji {
id: EmojiId(123),
animated: true,
name: "foo".to_owned(),
managed: false,
require_colons: true,
roles: vec![],
user: None,
available: true,
};
let cached = CachedEmoji {
id: EmojiId(123),
animated: true,
name: "foo".to_owned(),
managed: false,
require_colons: true,
roles: vec![],
user_id: None,
available: true,
};
assert_eq!(cached, emoji);
}
}