use bytes::{Buf, Bytes}; use hyper::rt::{Read, ReadBufCursor, Write};
use std::{
pin::Pin,
task::{self, Poll},
};
/// Combine a buffer with an IO, rewinding reads to use the buffer. #[derive(Debug)] pub(crate) struct Rewind<T> { pub(crate) pre: Option<Bytes>, pub(crate) inner: T,
}
impl<T> Read for Rewind<T> where
T: Read + Unpin,
{ fn poll_read( mutself: Pin<&mutSelf>,
cx: &mut task::Context<'_>, mut buf: ReadBufCursor<'_>,
) -> Poll<io::Result<()>> { iflet Some(mut prefix) = self.pre.take() { // If there are no remaining bytes, let the bytes get dropped. if !prefix.is_empty() { let copy_len = cmp::min(prefix.len(), buf.remaining());
buf.put_slice(&prefix[..copy_len]);
prefix.advance(copy_len); // Put back what's left if !prefix.is_empty() { self.pre = Some(prefix);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.