amqpr_codec/frame/
mod.rs

1pub mod decoder;
2pub mod encoder;
3
4pub mod method;
5pub mod content_body;
6pub mod content_header;
7
8
9use self::method::MethodPayload;
10use self::content_header::ContentHeaderPayload;
11use self::content_body::ContentBodyPayload;
12
13
14pub const FRAME_END_OCTET: u8 = 0xCE;
15
16
17#[derive(PartialEq, Clone, Debug)]
18pub struct Frame {
19    pub header: FrameHeader,
20    pub payload: FramePayload,
21}
22
23
24#[derive(PartialEq, Clone, Debug)]
25pub struct FrameHeader {
26    pub channel: u16,
27}
28
29
30#[derive(Eq, PartialEq, Clone, Debug)]
31pub enum FrameType {
32    Method,
33    ContentHeader,
34    ContentBody,
35    Heartbeat,
36}
37
38
39#[derive(PartialEq, Clone, Debug)]
40pub enum FramePayload {
41    Method(MethodPayload),
42    ContentHeader(ContentHeaderPayload),
43    ContentBody(ContentBodyPayload),
44    Heartbeat,
45}
46
47
48// Implementation of Frame {{{
49impl Frame {
50    pub fn new(channel: u16, payload: FramePayload) -> Frame {
51        Frame {
52            header: FrameHeader { channel: channel },
53            payload: payload,
54        }
55    }
56
57    pub fn new_method(channel: u16, payload: MethodPayload) -> Frame {
58        Frame::new(channel, FramePayload::Method(payload))
59    }
60
61    pub fn new_content_header(channel: u16, payload: ContentHeaderPayload) -> Frame {
62        Frame::new(channel, FramePayload::ContentHeader(payload))
63    }
64
65    pub fn new_content_body(channel: u16, payload: ContentBodyPayload) -> Frame {
66        Frame::new(channel, FramePayload::ContentBody(payload))
67    }
68
69    pub fn new_heartbeat(channel: u16) -> Frame {
70        Frame::new(channel, FramePayload::Heartbeat)
71    }
72
73
74    pub fn method(&self) -> Option<&MethodPayload> {
75        match &self.payload {
76            &FramePayload::Method(ref p) => Some(p),
77            _ => None,
78        }
79    }
80
81    pub fn content_header(&self) -> Option<&ContentHeaderPayload> {
82        match &self.payload {
83            &FramePayload::ContentHeader(ref p) => Some(p),
84            _ => None,
85        }
86    }
87
88    pub fn content_body(&self) -> Option<&ContentBodyPayload> {
89        match &self.payload {
90            &FramePayload::ContentBody(ref p) => Some(p),
91            _ => None,
92        }
93    }
94
95    pub fn heartbeat(&self) -> Option<()> {
96        match &self.payload {
97            &FramePayload::Heartbeat => Some(()),
98            _ => None,
99        }
100    }
101}
102// }}}