tokio_coap/
codec.rs

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}