use anyhow to add context to File::open errors

This commit is contained in:
Paul Campbell 2023-08-07 09:31:28 +01:00
parent 304ae6740d
commit 407fb26e50
5 changed files with 26 additions and 3 deletions

7
Cargo.lock generated
View file

@ -84,6 +84,12 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "anyhow"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
[[package]]
name = "atom_syndication"
version = "0.12.1"
@ -1039,6 +1045,7 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
name = "podal"
version = "0.1.0"
dependencies = [
"anyhow",
"atom_syndication",
"bytes",
"clap",

View file

@ -11,6 +11,7 @@ reqwest = { version = "0.11.18", features = ["json", "blocking"] }
scraper = "0.17.1"
clap = {version = "4.3.19", features = ["derive"]}
bytes = "1.4.0"
anyhow = "1.0.72"
[dev-dependencies]
tempfile = "*"

View file

@ -13,6 +13,14 @@ impl Error {
}
}
}
impl From<anyhow::Error> for Error {
fn from(value: anyhow::Error) -> Self {
Self {
details: value.to_string(),
source: value.source().unwrap().to_string(),
}
}
}
impl From<Utf8Error> for Error {
fn from(value: Utf8Error) -> Self {
Self {

View file

@ -1,3 +1,5 @@
use anyhow::Context;
use crate::params::Args;
use crate::prelude::*;
@ -19,7 +21,9 @@ impl FileEnv {
Self {
open: Box::new(move |file_name| {
let path = format!("{}/{}", &open_dir, file_name);
let file = File::open(path)?;
let file = File::open(&path).with_context(|| {
format!("FileEnv::open: file_name={file_name}, path={path}")
})?;
Ok(file)
}),
append_line: Box::new(move |file_name, line| {

View file

@ -7,6 +7,7 @@ use std::{
sync::mpsc::Sender,
};
use anyhow::Context;
use tempfile::{tempdir, TempDir};
use crate::{
@ -63,10 +64,12 @@ pub fn mock_network_fetch_as_bytes_with_rss_entries(
pub fn mock_file_open(real_paths: HashMap<String, String>) -> FileOpenFn {
Box::new(move |path: &str| {
if let Some(real_path) = real_paths.get(&path.to_string()) {
Ok(File::open(real_path)?)
Ok(File::open(real_path).with_context(|| {
format!("test_utils/mock_file_open: path={path}, real_path={real_path}, path_map=[{:?}]", real_paths)
})?)
} else {
Err(Error::message(
format!("Not implemented: file_open: {}", path).as_str(),
format!("Not implemented: test_utils/mock_file_open: {}", path).as_str(),
))
}
})