connection_utils/utils/
create_framed_stream.rs

1use std::pin::Pin;
2
3use tokio_util::codec::Framed;
4use tokio::io::{AsyncRead, AsyncWrite};
5use serde::{Serialize, de::DeserializeOwned};
6
7use crate::{codecs::GenericCodec, types::TFramedAsyncDuplex};
8
9/// Creates a new framed stream out of a channel.
10pub fn create_framed_stream<
11    T: Serialize + DeserializeOwned,
12    TAsyncDuplex: AsyncRead + AsyncWrite + Send + Unpin + ?Sized + 'static,
13>(
14    stream: Box<TAsyncDuplex>,
15) -> TFramedAsyncDuplex<T, TAsyncDuplex> {
16    return Framed::new(
17        Pin::new(stream),
18        GenericCodec::<T>::new(),
19    );
20}