Struct io_partition::Partition[][src]

pub struct Partition<T: Read + Seek> { /* fields omitted */ }

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

impl<T: Read + Seek> Partition<T>[src]

pub fn new(mut file: T, start: u64, lenght: u64) -> Result<Partition<T>>[src]

Create new Partition, with the specified input file, start and lenght

This will check that the file is big enought at creation, and the cursor will be located at the beggining of the file.

Trait Implementations

impl<T: Debug + Read + Seek> Debug for Partition<T>[src]

impl<T: Read + Seek> Read for Partition<T>[src]

impl<T: Seek + Read> Seek for Partition<T>[src]

impl<T: Read + Seek> Write for Partition<T>[src]

fn write(&mut self, _: &[u8]) -> Result<usize>[src]

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)

fn flush(&mut self) -> Result<()>[src]

Always suceed. It is useless to call it

Auto Trait Implementations

impl<T> RefUnwindSafe for Partition<T> where
    T: RefUnwindSafe
[src]

impl<T> Send for Partition<T> where
    T: Send
[src]

impl<T> Sync for Partition<T> where
    T: Sync
[src]

impl<T> Unpin for Partition<T> where
    T: Unpin
[src]

impl<T> UnwindSafe for Partition<T> where
    T: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.