diff --git a/Cargo.lock b/Cargo.lock index 0dd5107..1e29df1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index 04a0466..768b588 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 = "*" diff --git a/src/errors.rs b/src/errors.rs index 1135c29..149c8e4 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -13,6 +13,14 @@ impl Error { } } } +impl From for Error { + fn from(value: anyhow::Error) -> Self { + Self { + details: value.to_string(), + source: value.source().unwrap().to_string(), + } + } +} impl From for Error { fn from(value: Utf8Error) -> Self { Self { diff --git a/src/file/env.rs b/src/file/env.rs index 241de60..53eca4c 100644 --- a/src/file/env.rs +++ b/src/file/env.rs @@ -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| { diff --git a/src/test_utils.rs b/src/test_utils.rs index a29fcfa..8f58ea3 100644 --- a/src/test_utils.rs +++ b/src/test_utils.rs @@ -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) -> 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(), )) } })