use futures::StreamExt;
use crate::Buffer;
use crate::*;
pub struct BufferIterator {
handle: tokio::runtime::Handle,
inner: Option<BufferStream>,
}
impl BufferIterator {
#[inline]
pub(crate) fn new(handle: tokio::runtime::Handle, inner: BufferStream) -> Self {
Self {
handle,
inner: Some(inner),
}
}
}
impl Iterator for BufferIterator {
type Item = Result<Buffer>;
fn next(&mut self) -> Option<Self::Item> {
let Some(inner) = self.inner.as_mut() else {
return Some(Err(Error::new(
ErrorKind::Unexpected,
"reader has been dropped",
)));
};
self.handle.block_on(inner.next())
}
}
impl Drop for BufferIterator {
fn drop(&mut self) {
if let Some(v) = self.inner.take() {
self.handle.block_on(async move { drop(v) });
}
}
}