1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use std::pin::Pin;

use tokio_util::codec::Framed;
use cs_utils::futures::GenericCodec;
use tokio::io::{AsyncRead, AsyncWrite};
use serde::{Serialize, de::DeserializeOwned};

use crate::types::TFramedAsyncDuplex;

/// Creates a new framed stream out of a channel.
pub fn create_framed_stream<
    T: Serialize + DeserializeOwned,
    TAsyncDuplex: AsyncRead + AsyncWrite + Send + Unpin + ?Sized + 'static,
>(
    channel: Box<TAsyncDuplex>,
) -> TFramedAsyncDuplex<T, TAsyncDuplex> {
    return Framed::new(
        Pin::new(channel),
        GenericCodec::<T>::new(),
    );
}