use core::pin::Pin;
use core::task::{Context, Poll};
use futures_io::AsyncWrite;
use crate::{CountWrite, Result};
#[cfg(any(feature = "futures"))]
impl<W: AsyncWrite + Unpin> AsyncWrite for CountWrite<W> {
fn poll_write(self: Pin<&mut Self>, ctx: &mut Context, buf: &[u8]) -> Poll<Result<usize>> {
let Self { inner, count } = unsafe { self.get_unchecked_mut() };
let pin = unsafe { Pin::new_unchecked(inner) };
let ret = pin.poll_write(ctx, buf);
if let Poll::Ready(ret) = &ret {
if let Ok(written) = &ret {
*count += *written as u64;
}
}
ret
}
fn poll_flush(self: Pin<&mut Self>, ctx: &mut Context) -> Poll<Result> {
unsafe { self.map_unchecked_mut(|cw| &mut cw.inner) }.poll_flush(ctx)
}
fn poll_close(self: Pin<&mut Self>, ctx: &mut Context) -> Poll<Result> {
unsafe { self.map_unchecked_mut(|cw| &mut cw.inner) }.poll_close(ctx)
}
}