intrepid_core/extract/
message_data.rs1use bytes::Bytes;
2
3use crate::{Context, Frame};
4
5use super::{Extractor, Message, MessageFrameError};
6
7#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct MessageData(pub Bytes);
13
14impl<State> Extractor<State> for MessageData {
15 type Error = MessageFrameError;
16
17 fn extract(frame: Frame, context: &Context<State>) -> Result<Self, Self::Error>
18 where
19 Self: Sized,
20 {
21 let Message(message_frame) = Message::extract(frame, context)?;
22
23 Ok(Self(message_frame.data))
24 }
25}
26
27#[test]
28fn raw_message_data() -> Result<(), MessageFrameError> {
29 let frame = Frame::message("/test", vec![1, 2, 3], ());
30 let context = Context::<()>::default();
31 let MessageData(message_data) = MessageData::extract(frame, &context)?;
32
33 assert_eq!(message_data, vec![1, 2, 3]);
34
35 Ok(())
36}
37
38#[test]
39fn failure() -> Result<(), MessageFrameError> {
40 use crate::{Error, ExtractorError};
41
42 let context = Context::<()>::default();
43 let result = MessageData::extract_from_frame_and_state(Frame::default(), &context);
44
45 assert!(matches!(
46 result.unwrap_err(),
47 Error::ExtractorError(ExtractorError::MessageFrameError(
48 MessageFrameError::WrongFrame(_)
49 ))
50 ),);
51
52 Ok(())
53}