Crates.io | countio |
lib.rs | countio |
version | 0.2.19 |
source | src |
created_at | 2023-02-27 03:13:19.96555 |
updated_at | 2024-09-03 07:14:38.380895 |
description | Byte counting for std::io::{Read, Write, Seek} and its async variants from futures and tokio. |
homepage | https://github.com/spire-rs/countio |
repository | https://github.com/spire-rs/countio |
max_upload_size | |
id | 795648 |
size | 21,703 |
Check out other spire
projects here.
The wrapper struct to enable byte counting for std::io::{Read, Write, Seek}
and its asynchronous variants from futures
and tokio
crates.
std
to enable std::io::{Read, Write, Seek}
. Enabled by default.futures
to enable futures_io::{AsyncRead, AsyncWrite, AsyncSeek}
.tokio
to enable tokio::io::{AsyncRead, AsyncWrite, AsyncSeek}
.std::io::Read
:use std::io::{BufRead, BufReader, Result};
use countio::Counter;
fn main() -> Result<()> {
let reader = "Hello World!".as_bytes();
let reader = BufReader::new(reader);
let mut reader = Counter::new(reader);
let mut buf = String::new();
let len = reader.read_line(&mut buf)?;
assert_eq!(len, reader.reader_bytes());
Ok(())
}
std::io::Write
:use std::io::{BufWriter, Write, Result};
use countio::Counter;
fn main() -> Result<()> {
let writer = Vec::new();
let writer = BufWriter::new(writer);
let mut writer = Counter::new(writer);
let buf = "Hello World!".as_bytes();
let len = writer.write(buf)?;
writer.flush()?;
assert_eq!(len, writer.writer_bytes());
Ok(())
}