1pub fn init_error_hook(package_name: &'static str) {
14 color_eyre::config::HookBuilder::default()
16 .add_frame_filter(Box::new(move |frames| {
17 let filters = &[package_name];
18
19 frames.retain(|frame| {
21 filters.iter().any(|filter| {
24 if let Some(name) = frame.name.as_ref() {
25 let name = name.as_str();
26 name.starts_with(filter)
27 } else {
28 true
29 }
30 })
31 });
32 }))
33 .display_location_section(false) .display_env_section(false) .install()
36 .expect("Failed to initialize color_eyre");
37}
38
39#[cfg(test)]
40mod tests {
41 use eyre::{Report, Result, WrapErr};
42 use crate::error::*;
43
44 fn print_error(err: &Report) {
54 println!("{{err}} >> {err}");
55 println!("{{err:?}} >> {err:?}");
56 println!("{{err:#}} >> {err:#}");
57 println!("{{err:#?}} >> {err:#?}");
58 }
59
60 fn my_err() -> Report {
61 let err = || -> Result<()> {
62 Err(eyre::eyre!("error: my error 1"))
63 }().context("my error 2").context("my error 3").unwrap_err();
64
65 err
66 }
67
68 #[test]
69 fn error_no_hook_test() {
70 let err = my_err();
71 print_error(&err);
72 panic!("panic: {err:?}");
73 }
74
75 #[test]
76 fn error_hook_test() {
77 let package_name = "myutil";
78 init_error_hook(package_name);
79
80 let err = my_err();
81 print_error(&err);
82 panic!("panic: {err:?}");
83 }
84}