From 649613877e30fd63283063a0c1984b60fc25dc5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Mon, 16 Sep 2024 14:12:18 +0400 Subject: [PATCH] feat(tokio): add {split, unsplit}_tokio_framed() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau --- crates/ironrdp-tokio/src/lib.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/crates/ironrdp-tokio/src/lib.rs b/crates/ironrdp-tokio/src/lib.rs index b966df33..039b55ac 100644 --- a/crates/ironrdp-tokio/src/lib.rs +++ b/crates/ironrdp-tokio/src/lib.rs @@ -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 = Framed>; +pub fn split_tokio_framed(framed: TokioFramed) -> (TokioFramed>, TokioFramed>) +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(reader: TokioFramed>, writer: TokioFramed>) -> TokioFramed +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 { inner: S, }