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}