amqpr_codec/
lib.rs

1//! This crate defines codec of AMQP protocol.
2//!
3//! # Byte architecture of general AMQP message frame
4//!
5//! position   0      1         3      7         size+7      size+8
6//!            +------+---------+------+---------+-----------+
7//!            | type | channel | size | payload | frame_end |
8//!            +------+---------+------+---------+-----------+
9//! length        1        2        4     size         1
10//!
11//! "payload" is defined for each frame type.
12//!
13extern crate tokio_io;
14
15extern crate bytes;
16
17#[macro_use]
18extern crate log;
19
20pub mod frame;
21pub mod args;
22
23pub use args::{FieldArgument, AmqpString};
24pub use frame::{Frame, FrameHeader, FramePayload};
25pub use frame::method;
26pub use frame::content_header;
27pub use frame::content_body;
28
29
30use bytes::BytesMut;
31use std::io::Error as IoError;
32
33pub struct Codec;
34
35impl tokio_io::codec::Decoder for Codec {
36    type Item = Frame;
37    type Error = IoError;
38
39    fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, IoError> {
40        Ok(frame::decoder::decode_frame(src))
41    }
42}
43
44impl tokio_io::codec::Encoder for Codec {
45    type Item = Frame;
46    type Error = IoError;
47
48    fn encode(&mut self, item: Self::Item, dst: &mut BytesMut) -> Result<(), IoError> {
49        Ok(frame::encoder::encode_frame(item, dst))
50    }
51}