use super::super::super::std::immutable::*;
use {std::io, tokio::io::*};
pub async fn read_at_most<ReadT, BufMutT>(
reader: ReadT,
buffer: &mut BufMutT,
max_count: u64,
) -> io::Result<(ReadT, usize)>
where
ReadT: AsyncRead + Unpin,
BufMutT: BufMut,
{
let mut limited_reader = reader.take(max_count);
let mut total = 0;
loop {
match limited_reader.read_buf(buffer).await {
Ok(count) => {
if count == 0 {
break;
} else {
total += count;
}
}
Err(error) => {
if error.kind() == io::ErrorKind::UnexpectedEof {
break;
} else {
return Err(error);
}
}
}
}
Ok((limited_reader.into_inner(), total))
}