countio

Also check out other xwde projects here.
The wrapper struct to enable byte counting for std::io::Read,
std::io::Write, std::io::Seek and its asynchronous variants from futures
and tokio crates.
Features
std to enable std::io::{Read, Write, Seek, Debug}. Enabled by default.
futures to enable futures_io::{AsyncRead, AsyncWrite, AsyncSeek}.
tokio to enable tokio::io::{AsyncRead, AsyncWrite, AsyncSeek}.
Examples
use std::io::prelude::*;
use std::io::BufReader;
use countio::Counter;
fn main() {
let mut reader = "Hello World!".as_bytes();
let mut reader = Counter::new(reader);
let mut reader = BufReader::new(reader);
let mut buf = String::new();
let len = reader.read_line(&mut buf).unwrap();
assert_eq!(len, reader.get_ref().reader_bytes());
}
use std::io::prelude::*;
use std::io::BufWriter;
use countio::Counter;
fn main() {
let mut writer = Vec::new();
let mut writer = Counter::new(writer);
let mut writer = BufWriter::new(writer);
let buf = "Hello World!".as_bytes();
let len = writer.write(buf).unwrap();
writer.flush().unwrap();
assert_eq!(len, writer.get_ref().writer_bytes());
}
Links