twilight_model/channel/message/sticker/
message.rs

1use super::StickerFormatType;
2use crate::id::{marker::StickerMarker, Id};
3use serde::{Deserialize, Serialize};
4
5/// Smallest amount of data required to render a [`Sticker`].
6///
7/// [`Sticker`]: super::Sticker
8#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
9pub struct MessageSticker {
10    /// Format type.
11    pub format_type: StickerFormatType,
12    /// ID of the sticker.
13    pub id: Id<StickerMarker>,
14    /// Name of the sticker.
15    pub name: String,
16}
17
18#[cfg(test)]
19mod tests {
20    use super::{MessageSticker, StickerFormatType};
21    use crate::id::Id;
22    use serde::{Deserialize, Serialize};
23    use serde_test::Token;
24    use static_assertions::{assert_fields, assert_impl_all};
25    use std::{fmt::Debug, hash::Hash};
26
27    assert_fields!(MessageSticker: format_type, id, name);
28
29    assert_impl_all!(
30        MessageSticker: Clone,
31        Debug,
32        Deserialize<'static>,
33        Eq,
34        Hash,
35        PartialEq,
36        Send,
37        Serialize,
38        Sync,
39    );
40
41    #[test]
42    fn full() {
43        let value = MessageSticker {
44            format_type: StickerFormatType::Lottie,
45            id: Id::new(1),
46            name: "sticker".into(),
47        };
48
49        serde_test::assert_tokens(
50            &value,
51            &[
52                Token::Struct {
53                    name: "MessageSticker",
54                    len: 3,
55                },
56                Token::Str("format_type"),
57                Token::U8(StickerFormatType::Lottie.into()),
58                Token::Str("id"),
59                Token::NewtypeStruct { name: "Id" },
60                Token::Str("1"),
61                Token::Str("name"),
62                Token::Str("sticker"),
63                Token::StructEnd,
64            ],
65        );
66    }
67}