codecs/encoding/framing/
newline_delimited.rs1use bytes::BytesMut;
2use serde::{Deserialize, Serialize};
3use tokio_util::codec::Encoder;
4
5use super::{BoxedFramingError, CharacterDelimitedEncoder};
6
7#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq, Eq)]
9pub struct NewlineDelimitedEncoderConfig;
10
11impl NewlineDelimitedEncoderConfig {
12 pub fn new() -> Self {
14 Default::default()
15 }
16
17 pub fn build(&self) -> NewlineDelimitedEncoder {
19 NewlineDelimitedEncoder::default()
20 }
21}
22
23#[derive(Debug, Clone)]
25pub struct NewlineDelimitedEncoder(CharacterDelimitedEncoder);
26
27impl Default for NewlineDelimitedEncoder {
28 fn default() -> Self {
29 Self(CharacterDelimitedEncoder::new(b'\n'))
30 }
31}
32
33impl Encoder<()> for NewlineDelimitedEncoder {
34 type Error = BoxedFramingError;
35
36 fn encode(&mut self, _: (), buffer: &mut BytesMut) -> Result<(), BoxedFramingError> {
37 self.0.encode((), buffer)
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn encode_bytes() {
47 let mut input = BytesMut::from("foo");
48 let mut encoder = NewlineDelimitedEncoder::default();
49
50 encoder.encode((), &mut input).unwrap();
51
52 assert_eq!(input, "foo\n");
53 }
54}