twilight_model/poll/
media.rs

1use crate::id::{marker::EmojiMarker, Id};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5pub struct PollMedia {
6    /// The emoji of the field.
7    ///
8    /// When creating a poll answer with an emoji, one only
9    /// needs to send either the id (custom emoji) or name
10    /// (default emoji) as the only field.
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub emoji: Option<PartialPollMediaEmoji>,
13    /// The text of the field.
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub text: Option<String>,
16}
17
18#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
19pub struct PartialPollMediaEmoji {
20    #[serde(default)]
21    pub animated: bool,
22    pub id: Option<Id<EmojiMarker>>,
23    pub name: Option<String>,
24}
25
26#[cfg(test)]
27mod tests {
28    use super::{PartialPollMediaEmoji, PollMedia};
29    use crate::id::Id;
30    use serde_test::Token;
31
32    #[test]
33    fn poll_media() {
34        let value = PollMedia {
35            emoji: Some(PartialPollMediaEmoji {
36                animated: true,
37                id: Some(Id::new(1)),
38                name: Some("a".to_owned()),
39            }),
40            text: Some("b".to_owned()),
41        };
42
43        serde_test::assert_tokens(
44            &value,
45            &[
46                Token::Struct {
47                    name: "PollMedia",
48                    len: 2,
49                },
50                Token::Str("emoji"),
51                Token::Some,
52                Token::Struct {
53                    name: "PartialPollMediaEmoji",
54                    len: 3,
55                },
56                Token::Str("animated"),
57                Token::Bool(true),
58                Token::Str("id"),
59                Token::Some,
60                Token::NewtypeStruct { name: "Id" },
61                Token::Str("1"),
62                Token::Str("name"),
63                Token::Some,
64                Token::Str("a"),
65                Token::StructEnd,
66                Token::Str("text"),
67                Token::Some,
68                Token::Str("b"),
69                Token::StructEnd,
70            ],
71        );
72    }
73}