diff --git a/embedded-io-async/src/lib.rs b/embedded-io-async/src/lib.rs index b90935f2..6fb97437 100644 --- a/embedded-io-async/src/lib.rs +++ b/embedded-io-async/src/lib.rs @@ -167,3 +167,15 @@ pub trait Seek: ErrorType { self.seek(SeekFrom::Current(0)).await } } + +/// Split a stream in a reader and writer, which are independent +pub trait SplitRW { + /// Reader type of the split stream + type Reader: Read; + + /// Writer type of the split stream + type Writer: Write; + + /// Split a stream in a independent reader and writer + fn split_rw(&mut self) -> (Self::Reader, Self::Writer); +} diff --git a/embedded-io/src/lib.rs b/embedded-io/src/lib.rs index daca2441..0dbfe3cd 100644 --- a/embedded-io/src/lib.rs +++ b/embedded-io/src/lib.rs @@ -566,3 +566,15 @@ pub trait WriteReady: ErrorType { /// If this returns `true`, it's guaranteed that the next call to [`Write::write`] will not block. fn write_ready(&mut self) -> Result; } + +/// Split a stream in a reader and writer, which are independent +pub trait SplitRW { + /// Reader type of the split stream + type Reader: Read; + + /// Writer type of the split stream + type Writer: Write; + + /// Split a stream in a independent reader and writer + fn split_rw(&mut self) -> (Self::Reader, Self::Writer); +}