pub struct LimitSeekerReader<T>{ /* private fields */ }
Expand description
An AsyncRead + AsyncSeek wrapper It supports limit the bytes can be read. Typically used when you want to read a specific segments from a file
Example
async fn run_test() -> Result<(), Box<dyn std::error::Error>> {
use tokio::io::SeekFrom;
use tokio::io::{AsyncRead,AsyncSeek, AsyncReadExt, AsyncSeekExt};
let f = tokio::fs::File::open("input.txt").await?;
let read_from: u64 = 18; // start read from 18'th byte
let mut lsr = crate::asyncio_utils::LimitSeekerReader::new(f, Some(20)); // read up to 20 bytes
lsr.seek(SeekFrom::Start(read_from)); // do seek
let mut buf = vec![0u8; 1024];
lsr.read(&mut buf); // read it
return Ok(());
}
Implementations§
Source§impl<T> LimitSeekerReader<T>
Implement a limit reader for AsyncRead and AsyncSeek together. Typically a file
Note that if your seek does not affect total reads. You can seek with positive/negative
from current/begin of file/end of file, but it does not change the total bytes would be
read from the reader.
impl<T> LimitSeekerReader<T>
Implement a limit reader for AsyncRead and AsyncSeek together. Typically a file Note that if your seek does not affect total reads. You can seek with positive/negative from current/begin of file/end of file, but it does not change the total bytes would be read from the reader.
This is a little bit weird though. Typically what you want to do is just seek before reading.
This is useful when you want to service Http Get with Range requests.
You open tokio::fs::File you seek the position you set limit on number of bytes to read you start reading and serving.
Sourcepub fn destruct(self) -> (usize, T)
pub fn destruct(self) -> (usize, T)
Destruct the LimitSeekerReader and get the bytes read so far and the original reader Returns the size read and the original reader.
You can’t use the LimitSeekerReader after this call
Sourcepub fn new(src: T, limit: Option<usize>) -> LimitSeekerReader<T>
pub fn new(src: T, limit: Option<usize>) -> LimitSeekerReader<T>
Create new LimitSeekerReader from another AsyncRead + AsyncSeek (typically file)
Argument src is the underlying reader + seeker limit is the byte limit. Node that the limit can be Some(limit) None -> No limit (std::usize::MAX)
Trait Implementations§
Source§impl<T> AsyncRead for LimitSeekerReader<T>
Implementation of AsyncRead
impl<T> AsyncRead for LimitSeekerReader<T>
Implementation of AsyncRead
Source§impl<T> AsyncSeek for LimitSeekerReader<T>
Implementation of AsyncSeek
impl<T> AsyncSeek for LimitSeekerReader<T>
Implementation of AsyncSeek
Auto Trait Implementations§
impl<T> Freeze for LimitSeekerReader<T>where
T: Freeze,
impl<T> RefUnwindSafe for LimitSeekerReader<T>where
T: RefUnwindSafe,
impl<T> Send for LimitSeekerReader<T>where
T: Send,
impl<T> Sync for LimitSeekerReader<T>where
T: Sync,
impl<T> Unpin for LimitSeekerReader<T>
impl<T> UnwindSafe for LimitSeekerReader<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<R> AsyncReadExt for R
impl<R> AsyncReadExt for R
Source§fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
Source§fn read_buf<'a, B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>
fn read_buf<'a, B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>
Source§fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
buf
. Read moreSource§fn read_u8(&mut self) -> ReadU8<&mut Self>where
Self: Unpin,
fn read_u8(&mut self) -> ReadU8<&mut Self>where
Self: Unpin,
Source§fn read_i8(&mut self) -> ReadI8<&mut Self>where
Self: Unpin,
fn read_i8(&mut self) -> ReadI8<&mut Self>where
Self: Unpin,
Source§fn read_u16(&mut self) -> ReadU16<&mut Self>where
Self: Unpin,
fn read_u16(&mut self) -> ReadU16<&mut Self>where
Self: Unpin,
Source§fn read_i16(&mut self) -> ReadI16<&mut Self>where
Self: Unpin,
fn read_i16(&mut self) -> ReadI16<&mut Self>where
Self: Unpin,
Source§fn read_u32(&mut self) -> ReadU32<&mut Self>where
Self: Unpin,
fn read_u32(&mut self) -> ReadU32<&mut Self>where
Self: Unpin,
Source§fn read_i32(&mut self) -> ReadI32<&mut Self>where
Self: Unpin,
fn read_i32(&mut self) -> ReadI32<&mut Self>where
Self: Unpin,
Source§fn read_u64(&mut self) -> ReadU64<&mut Self>where
Self: Unpin,
fn read_u64(&mut self) -> ReadU64<&mut Self>where
Self: Unpin,
Source§fn read_i64(&mut self) -> ReadI64<&mut Self>where
Self: Unpin,
fn read_i64(&mut self) -> ReadI64<&mut Self>where
Self: Unpin,
Source§fn read_u128(&mut self) -> ReadU128<&mut Self>where
Self: Unpin,
fn read_u128(&mut self) -> ReadU128<&mut Self>where
Self: Unpin,
Source§fn read_i128(&mut self) -> ReadI128<&mut Self>where
Self: Unpin,
fn read_i128(&mut self) -> ReadI128<&mut Self>where
Self: Unpin,
Source§fn read_f32(&mut self) -> ReadF32<&mut Self>where
Self: Unpin,
fn read_f32(&mut self) -> ReadF32<&mut Self>where
Self: Unpin,
Source§fn read_f64(&mut self) -> ReadF64<&mut Self>where
Self: Unpin,
fn read_f64(&mut self) -> ReadF64<&mut Self>where
Self: Unpin,
Source§fn read_u16_le(&mut self) -> ReadU16Le<&mut Self>where
Self: Unpin,
fn read_u16_le(&mut self) -> ReadU16Le<&mut Self>where
Self: Unpin,
Source§fn read_i16_le(&mut self) -> ReadI16Le<&mut Self>where
Self: Unpin,
fn read_i16_le(&mut self) -> ReadI16Le<&mut Self>where
Self: Unpin,
Source§fn read_u32_le(&mut self) -> ReadU32Le<&mut Self>where
Self: Unpin,
fn read_u32_le(&mut self) -> ReadU32Le<&mut Self>where
Self: Unpin,
Source§fn read_i32_le(&mut self) -> ReadI32Le<&mut Self>where
Self: Unpin,
fn read_i32_le(&mut self) -> ReadI32Le<&mut Self>where
Self: Unpin,
Source§fn read_u64_le(&mut self) -> ReadU64Le<&mut Self>where
Self: Unpin,
fn read_u64_le(&mut self) -> ReadU64Le<&mut Self>where
Self: Unpin,
Source§fn read_i64_le(&mut self) -> ReadI64Le<&mut Self>where
Self: Unpin,
fn read_i64_le(&mut self) -> ReadI64Le<&mut Self>where
Self: Unpin,
Source§fn read_u128_le(&mut self) -> ReadU128Le<&mut Self>where
Self: Unpin,
fn read_u128_le(&mut self) -> ReadU128Le<&mut Self>where
Self: Unpin,
Source§fn read_i128_le(&mut self) -> ReadI128Le<&mut Self>where
Self: Unpin,
fn read_i128_le(&mut self) -> ReadI128Le<&mut Self>where
Self: Unpin,
Source§fn read_f32_le(&mut self) -> ReadF32Le<&mut Self>where
Self: Unpin,
fn read_f32_le(&mut self) -> ReadF32Le<&mut Self>where
Self: Unpin,
Source§fn read_f64_le(&mut self) -> ReadF64Le<&mut Self>where
Self: Unpin,
fn read_f64_le(&mut self) -> ReadF64Le<&mut Self>where
Self: Unpin,
Source§fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>where
Self: Unpin,
fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>where
Self: Unpin,
buf
. Read more