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
48impl 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