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 component_type: ComponentType,
19 pub custom_id: String,
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: component_type,
51 custom_id,
52 resolved,
53 values
54 );
55 assert_impl_all!(
56 MessageComponentInteractionData: Clone,
57 Debug,
58 Deserialize<'static>,
59 PartialEq,
60 Send,
61 Serialize,
62 Sync
63 );
64
65 #[test]
66 fn message_component_interaction_data() {
67 let value = MessageComponentInteractionData {
68 component_type: ComponentType::Button,
69 custom_id: "test".to_owned(),
70 resolved: None,
71 values: Vec::from(["1".to_owned(), "2".to_owned()]),
72 };
73
74 serde_test::assert_tokens(
75 &value,
76 &[
77 Token::Struct {
78 name: "MessageComponentInteractionData",
79 len: 4,
80 },
81 Token::String("component_type"),
82 Token::U8(ComponentType::Button.into()),
83 Token::String("custom_id"),
84 Token::String("test"),
85 Token::String("resolved"),
86 Token::None,
87 Token::String("values"),
88 Token::Seq { len: Some(2) },
89 Token::String("1"),
90 Token::String("2"),
91 Token::SeqEnd,
92 Token::StructEnd,
93 ],
94 )
95 }
96}