twilight_model/application/interaction/
message_component.rs1use crate::application::interaction::InteractionDataResolved;
6use crate::channel::message::component::ComponentType;
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
16pub struct MessageComponentInteractionData {
17    pub custom_id: String,
23    pub component_type: ComponentType,
25    pub resolved: Option<InteractionDataResolved>,
31    #[serde(default)]
37    pub values: Vec<String>,
38}
39
40#[cfg(test)]
41mod tests {
42    use super::MessageComponentInteractionData;
43    use crate::channel::message::component::ComponentType;
44    use serde::{Deserialize, Serialize};
45    use serde_test::Token;
46    use static_assertions::{assert_fields, assert_impl_all};
47    use std::fmt::Debug;
48
49    assert_fields!(
50        MessageComponentInteractionData: custom_id,
51        component_type,
52        values
53    );
54    assert_impl_all!(
55        MessageComponentInteractionData: Clone,
56        Debug,
57        Deserialize<'static>,
58        PartialEq,
59        Send,
60        Serialize,
61        Sync
62    );
63
64    #[test]
65    fn message_component_interaction_data() {
66        let value = MessageComponentInteractionData {
67            custom_id: "test".to_owned(),
68            component_type: ComponentType::Button,
69            resolved: None,
70            values: Vec::from(["1".to_owned(), "2".to_owned()]),
71        };
72
73        serde_test::assert_tokens(
74            &value,
75            &[
76                Token::Struct {
77                    name: "MessageComponentInteractionData",
78                    len: 4,
79                },
80                Token::String("custom_id"),
81                Token::String("test"),
82                Token::String("component_type"),
83                Token::U8(ComponentType::Button.into()),
84                Token::String("resolved"),
85                Token::None,
86                Token::String("values"),
87                Token::Seq { len: Some(2) },
88                Token::String("1"),
89                Token::String("2"),
90                Token::SeqEnd,
91                Token::StructEnd,
92            ],
93        )
94    }
95}