Crate throttled_reader [−] [src]
This crate provides ThrottledReader
, a proxy-type for io::Read
that limits how many times
the underlying reader can be read from. If the read budget is exceeded,
io::ErrorKind::WouldBlock
is returned instead. This type can be useful to enforce fairness
when reading from many (potentially asynchronous) input streams with highly varying load. If
one stream always has data available, a worker may continue consuming its input forever,
neglecting the other stream.
Examples
let mut buf = [0]; let mut stream = ThrottledReader::new(io::empty()); // initially no limit assert!(stream.read(&mut buf).is_ok()); assert!(stream.read(&mut buf).is_ok()); // set a limit stream.set_limit(2); assert!(stream.read(&mut buf).is_ok()); // first is allowed through assert!(stream.read(&mut buf).is_ok()); // second is also allowed through // but now the limit is reached, and the underlying stream is no longer accessible assert_eq!( stream.read(&mut buf).unwrap_err().kind(), io::ErrorKind::WouldBlock ); // we can then unthrottle it again after checking other streams stream.unthrottle(); assert!(stream.read(&mut buf).is_ok()); assert!(stream.read(&mut buf).is_ok());
Structs
ThrottledReader |
|