1use std::io;
2use std::option::Option;
3
4use tokio_io::codec::{Decoder,Encoder};
5use bytes::BytesMut;
6
7use message::Message;
8
9pub struct CoapCodec;
10
11impl Encoder for CoapCodec {
12 type Item = Message;
13 type Error = io::Error;
14
15 fn encode(&mut self, msg: Self::Item, dst: &mut BytesMut) -> Result<(), Self::Error> {
16 let bytes = msg.to_bytes().unwrap();
17 dst.extend(bytes);
18
19 Ok(())
20 }
21}
22
23impl Decoder for CoapCodec {
24 type Item = Message;
25 type Error = io::Error;
26
27 fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
28 match Message::from_bytes(&buf) {
29 Ok(msg) => Ok(Some(msg)),
30 Err(_) => Ok(None),
31 }
32 }
33}