Module olio::fs[][src]

Filesystem extensions and utilities.

The PosRead trait offers a uniform pread for positioned reads.

The ReadPos and ReadSlice types re-implement Read and Seek over any Borrow of a PosRead type. For File in particular, this enables multiple independent reader instances, without needing a path to open an independent new File instance. Thus these types are compatible with "unnamed" (not linked) temporary files, and can reduce the number of necessary file handles. Note that unix dup/dup2 and the standard File::try_clone do not provide independent file positions.

Example

extern crate olio;
extern crate tempfile;

use std::fs::File;
use std::io::{Read, Write};
use olio::fs::{ReadPos, ReadSlice};
use tempfile::tempfile;

let mut file = tempfile()?;
file.write_all(b"0123456789")?;

// ReadPos by &File so that we can subslice by shared reference
let mut rpos = ReadPos::new(&file, 10);

// Read the first half
let mut buf = [0u8; 5];
rpos.read_exact(&mut buf)?;
assert_eq!(&buf, b"01234");

// Create an independent ReadSlice and read to end
let mut rslice = rpos.subslice(2, 7);
let mut buf = Vec::new();
rslice.read_to_end(&mut buf)?;
assert_eq!(&buf, b"23456");

// Read the second half from the original ReadPos
assert_eq!(rpos.tell(), 5);
let mut buf = [0u8; 5];
rpos.read_exact(&mut buf)?;
assert_eq!(&buf, b"56789");

Modules

rc

Compatibility type aliases.

Structs

ReadPos

Re-implements Read and Seek over PosRead using only positioned reads, and by maintaining an instance independent position.

ReadSlice

Re-implements Read and Seek over PosRead using only positioned reads, and by maintaining instance independent start, end, and position.

Traits

PosRead

Trait offering a uniform pread for positioned reads, with platform dependent side-effects.