feat(tokio): add {split, unsplit}_tokio_framed()

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau
2024-09-23 02:25:59 -04:00
committed by Benoît Cortier
parent b55924ee0a
commit 649613877e
+21 -1
View File
@@ -5,10 +5,30 @@ use std::io;
use std::pin::Pin;
use bytes::BytesMut;
use tokio::io::{AsyncRead, AsyncWrite};
use tokio::io::{AsyncRead, AsyncWrite, ReadHalf, WriteHalf};
pub type TokioFramed<S> = Framed<TokioStream<S>>;
pub fn split_tokio_framed<S>(framed: TokioFramed<S>) -> (TokioFramed<ReadHalf<S>>, TokioFramed<WriteHalf<S>>)
where
S: Sync + Unpin + AsyncRead + AsyncWrite,
{
let (stream, leftover) = framed.into_inner();
let (read_half, write_half) = tokio::io::split(stream);
let framed_read = TokioFramed::new_with_leftover(read_half, leftover);
let framed_write = TokioFramed::new(write_half);
(framed_read, framed_write)
}
pub fn unsplit_tokio_framed<S>(reader: TokioFramed<ReadHalf<S>>, writer: TokioFramed<WriteHalf<S>>) -> TokioFramed<S>
where
S: Sync + Unpin + AsyncRead + AsyncWrite,
{
let (reader, leftover) = reader.into_inner();
let writer = writer.into_inner_no_leftover();
TokioFramed::new_with_leftover(reader.unsplit(writer), leftover)
}
pub struct TokioStream<S> {
inner: S,
}