pub trait ReadPath {
// Required methods
fn exists(&self) -> Result<bool, PathError>;
fn read_to_bytes(&self) -> Result<Vec<u8>, PathError>;
fn copy(&self, dest: &WritablePath) -> Result<(), PathError>;
// Provided methods
fn read_to_string(&self) -> Result<String, PathError> { ... }
fn is_utf8(&self) -> Result<bool, PathError> { ... }
fn hash(&self) -> Result<u64, PathError> { ... }
}