pub struct Partition<T: Read + Seek> { /* private fields */ }
Expand description
A Partition
allow you to refer to a part of the file. It consume the input file.
The input offset is the first byte that will be accessible. The user of the Partition
won’t be able to seek before it, and it will be considered the offset 0 of the Partition
The input lenght is the number of byte that can be read with this Partition
. The last readable byte from the input file is input_offset + input_len
§Examples
use std::io::{Cursor, Read, Seek, SeekFrom};
use io_partition::Partition;
let some_value = (0..30).collect::<Vec<u8>>();
let input_file = Cursor::new(&some_value); //0, 1, 2, 3 ... 99
let mut partition = Partition::new(input_file, 10, 20).unwrap();
let mut buffer = [0];
partition.read_exact(&mut buffer).unwrap();
assert_eq!(buffer, [10]);
partition.read_exact(&mut buffer).unwrap();
assert_eq!(buffer, [11]);
assert!(partition.seek(SeekFrom::Current(-10)).is_err());
partition.seek(SeekFrom::End(-1)).unwrap();
partition.read_exact(&mut buffer).unwrap();
assert_eq!(buffer, [29]);
partition.seek(SeekFrom::End(-3));
let mut buffer_large = [0; 6];
assert_eq!(partition.read(&mut buffer_large).unwrap(), 3);
assert_eq!(buffer_large, [27, 28, 29, 0, 0, 0]);
Implementations§
Trait Implementations§
Source§impl<T: Read + Seek> Read for Partition<T>
impl<T: Read + Seek> Read for Partition<T>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Pull some bytes from this source into the specified buffer, returning
how many bytes were read. Read more
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
Like
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
Reads all bytes until EOF in this source, placing them into
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
Reads all bytes until EOF in this source, appending them to
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
Reads the exact number of bytes required to fill
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf
)Pull some bytes from this source into the specified buffer. Read more
Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf
)Reads the exact number of bytes required to fill
cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Creates a “by reference” adaptor for this instance of
Read
. Read moreSource§impl<T: Seek + Read> Seek for Partition<T>
impl<T: Seek + Read> Seek for Partition<T>
Source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
Seek to an offset, in bytes, in a stream. Read more
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Rewind to the beginning of a stream. Read more
Source§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
🔬This is a nightly-only experimental API. (
seek_stream_len
)Returns the length of this stream (in bytes). Read more
Source§impl<T: Read + Seek> Write for Partition<T>
impl<T: Read + Seek> Write for Partition<T>
Source§fn write(&mut self, _: &[u8]) -> Result<usize>
fn write(&mut self, _: &[u8]) -> Result<usize>
Do not use this write function. It will always fail. It is just here because some library require this to have the Write
trait to make this work with this (rust_vfs)
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector
)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
write_all_vectored
)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations§
impl<T> Freeze for Partition<T>where
T: Freeze,
impl<T> RefUnwindSafe for Partition<T>where
T: RefUnwindSafe,
impl<T> Send for Partition<T>where
T: Send,
impl<T> Sync for Partition<T>where
T: Sync,
impl<T> Unpin for Partition<T>where
T: Unpin,
impl<T> UnwindSafe for Partition<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more