use color_eyre::{eyre::Report, eyre::WrapErr, Section}; use tracing::{info, instrument}; #[instrument] fn main() -> Result<(), Report> { std::env::set_var("RUST_BACKTRACE", "1"); #[cfg(feature = "capture-spantrace")] install_tracing(); color_eyre::config::HookBuilder::default() .add_frame_filter(Box::new(|frames| { let filters = &["custom_filter::main"]; frames.retain(|frame| { !filters.iter().any(|f| { let name = if let Some(name) = frame.name.as_ref() { name.as_str() } else { return true; }; name.starts_with(f) }) }); })) .install() .unwrap(); Ok(read_config()?) } #[cfg(feature = "capture-spantrace")] fn install_tracing() { use tracing_error::ErrorLayer; use tracing_subscriber::prelude::*; use tracing_subscriber::{fmt, EnvFilter}; let fmt_layer = fmt::layer().with_target(false); let filter_layer = EnvFilter::try_from_default_env() .or_else(|_| EnvFilter::try_new("info")) .unwrap(); tracing_subscriber::registry() .with(filter_layer) .with(fmt_layer) .with(ErrorLayer::default()) .init(); } #[instrument] fn read_file(path: &str) -> Result<(), Report> { info!("Reading file"); Ok(std::fs::read_to_string(path).map(drop)?) } #[instrument] fn read_config() -> Result<(), Report> { read_file("fake_file") .wrap_err("Unable to read config") .suggestion("try using a file that exists next time") }