January 2018
Beginner to intermediate
454 pages
10h 8m
English
Then, we implement the Decoder trait like we did for the FtpCodec:
impl Decoder for BytesCodec { type Item = Vec<u8>; type Error = io::Error; fn decode(&mut self, buf: &mut BytesMut) -> io::Result<Option<Vec<u8>>> { if buf.len() == 0 { return Ok(None); } let data = buf.to_vec(); buf.clear(); Ok(Some(data)) } }
Since the data of a transmitted file can be binary, we cannot use an Item of type String. We instead use Vec<u8>, which we can contain every possible byte. If the buffer is empty, we return Ok(None) to indicate to tokio that we need more data. Otherwise, we convert it to a vector, clear the buffer and return the vector.