use crate::{
error::{Error, Operation, Result},
path::Path,
};
pub(crate) fn open(path: &Path) -> Result<std::fs::File> {
std::fs::File::open(path).map_err(|source| Error::new(Operation::OpenFile, path, source))
}
pub(crate) fn read_bytes(path: &Path) -> Result<Vec<u8>> {
std::fs::read(path).map_err(|source| Error::new(Operation::ReadFile, path, source))
}
pub(crate) fn read_text(path: &Path) -> Result<String> {
std::fs::read_to_string(path).map_err(|source| Error::new(Operation::ReadFile, path, source))
}
pub(crate) fn read_text_if_exists(path: &Path) -> Result<Option<String>> {
match read_text(path) {
Ok(contents) => Ok(Some(contents)),
Err(error) if error.is_not_found() => Ok(None),
Err(error) => Err(error),
}
}
#[cfg(test)]
pub(crate) fn write_bytes(path: &Path, contents: impl AsRef<[u8]>) -> Result<()> {
std::fs::write(path, contents).map_err(|source| Error::new(Operation::WriteFile, path, source))
}
#[cfg(test)]
pub(crate) fn write_text(path: &Path, contents: &str) -> Result<()> {
write_bytes(path, contents)
}