use std::convert::TryInto; use std::fs::File; use std::io::Read; use std::path::Path; #[derive (Debug)] pub enum LoadFileErr { FileTooBig, Io (std::io::Error), } impl From for LoadFileErr { fn from (e: std::io::Error) -> Self { Self::Io (e) } } pub fn load_small_file

(name: P, max_size: u64) -> Result , LoadFileErr> where P: AsRef { let mut f = File::open (name)?; let len = f.metadata ()?.len (); if len > max_size { return Err (LoadFileErr::FileTooBig); } let mut data = vec! [0u8; len.try_into ().unwrap ()]; f.read_exact (&mut data [..])?; Ok (data) }