codecs/encoding/framing/
mod.rs1#![deny(missing_docs)]
5
6mod bytes;
7mod character_delimited;
8mod length_delimited;
9mod newline_delimited;
10
11use std::fmt::Debug;
12
13pub use character_delimited::{
14 CharacterDelimitedEncoder, CharacterDelimitedEncoderConfig, CharacterDelimitedEncoderOptions,
15};
16use dyn_clone::DynClone;
17pub use length_delimited::{LengthDelimitedEncoder, LengthDelimitedEncoderConfig};
18pub use newline_delimited::{NewlineDelimitedEncoder, NewlineDelimitedEncoderConfig};
19use tokio_util::codec::LinesCodecError;
20
21pub use self::bytes::{BytesEncoder, BytesEncoderConfig};
22
23pub trait FramingError: std::error::Error + Send + Sync {}
25
26impl std::error::Error for BoxedFramingError {}
27
28impl FramingError for std::io::Error {}
29
30impl FramingError for LinesCodecError {}
31
32impl From<std::io::Error> for BoxedFramingError {
33 fn from(error: std::io::Error) -> Self {
34 Box::new(error)
35 }
36}
37
38pub type BoxedFramingError = Box<dyn FramingError>;
40
41pub trait Framer:
43 tokio_util::codec::Encoder<(), Error = BoxedFramingError> + DynClone + Debug + Send + Sync
44{
45}
46
47impl<Encoder> Framer for Encoder where
50 Encoder:
51 tokio_util::codec::Encoder<(), Error = BoxedFramingError> + Clone + Debug + Send + Sync
52{
53}
54
55dyn_clone::clone_trait_object!(Framer);
56
57pub type BoxedFramer = Box<dyn Framer>;