codecs/encoding/framing/
mod.rs1#![deny(missing_docs)]
5
6mod bytes;
7mod character_delimited;
8mod framer;
9mod length_delimited;
10mod newline_delimited;
11mod varint_length_delimited;
12
13use std::fmt::Debug;
14
15pub use character_delimited::{
16 CharacterDelimitedEncoder, CharacterDelimitedEncoderConfig, CharacterDelimitedEncoderOptions,
17};
18use dyn_clone::DynClone;
19pub use length_delimited::{LengthDelimitedEncoder, LengthDelimitedEncoderConfig};
20pub use newline_delimited::{NewlineDelimitedEncoder, NewlineDelimitedEncoderConfig};
21use tokio_util::codec::LinesCodecError;
22
23pub use self::{
24 bytes::{BytesEncoder, BytesEncoderConfig},
25 framer::{Framer, FramingConfig},
26 varint_length_delimited::{VarintLengthDelimitedEncoder, VarintLengthDelimitedEncoderConfig},
27};
28
29pub trait FramingError: std::error::Error + Send + Sync {}
31
32impl std::error::Error for BoxedFramingError {}
33
34impl FramingError for std::io::Error {}
35
36impl FramingError for LinesCodecError {}
37
38impl From<std::io::Error> for BoxedFramingError {
39 fn from(error: std::io::Error) -> Self {
40 Box::new(error)
41 }
42}
43
44impl From<varint_length_delimited::VarintFramingError> for BoxedFramingError {
45 fn from(error: varint_length_delimited::VarintFramingError) -> Self {
46 Box::new(error)
47 }
48}
49
50pub type BoxedFramingError = Box<dyn FramingError>;
52
53pub trait FramingEncoder:
59 tokio_util::codec::Encoder<(), Error = BoxedFramingError> + DynClone + Debug + Send + Sync
60{
61}
62
63impl<Encoder> FramingEncoder for Encoder where
66 Encoder:
67 tokio_util::codec::Encoder<(), Error = BoxedFramingError> + Clone + Debug + Send + Sync
68{
69}
70
71dyn_clone::clone_trait_object!(FramingEncoder);
72
73pub type BoxedFramer = Box<dyn FramingEncoder>;