| 30 | type Item = String; |
| 31 | type Error = Error; |
| 32 | fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Error> { |
| 33 | let bytes = &buf[..]; |
| 34 | let mut i = self.search_pos; |
| 35 | |
| 36 | while i + 1 < bytes.len() { |
| 37 | if bytes[i] == b'\n' && bytes[i + 1] == b'\n' { |
| 38 | let line = buf.split_to(i + 2); |
| 39 | let line = &line[..line.len() - 2]; |
| 40 | |
| 41 | self.search_pos = 0; |
| 42 | |
| 43 | return Ok(Some(utf8(line)?.to_owned())); |
| 44 | } |
| 45 | i += 1; |
| 46 | } |
| 47 | |
| 48 | self.search_pos = bytes.len().saturating_sub(1); |
| 49 | |
| 50 | Ok(None) |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | impl<T> Encoder<T> for MultiLineCodec |