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