use std::io::{BufReader, BufRead, Seek, Cursor};
use std::fs::File;
use std::path::Path;
use types::Result;
pub trait LoadableMetadata: Sized {
fn load<R: ?Sized + BufRead>(r: &mut R) -> Result<Self>;
fn load_from_seek<R: ?Sized + BufRead + Seek>(r: &mut R) -> Result<Self> {
LoadableMetadata::load(r)
}
#[inline]
fn load_from_file<P: AsRef<Path>>(path: P) -> Result<Self> {
let mut f = BufReader::new(try!(File::open(path)));
LoadableMetadata::load_from_seek(&mut f)
}
#[inline]
fn load_from_buf(buf: &[u8]) -> Result<Self> {
LoadableMetadata::load_from_seek(&mut Cursor::new(buf))
}
}