twilight_model/poll/
media.rs1use crate::id::{marker::EmojiMarker, Id};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5pub struct PollMedia {
6 #[serde(skip_serializing_if = "Option::is_none")]
12 pub emoji: Option<PartialPollMediaEmoji>,
13 #[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}