My personal-knowledge-system, with deeply integrated task tracking and long term goal planning capabilities.
at tui 74 lines 2.4 kB view raw
1/// Sets the panic-hook to be customized color-eyre `panic_hook`. 2/// 3/// Additionally the panic handler prints different information 4/// based on debug / release builds. 5pub fn init() -> color_eyre::Result<()> { 6 let (_panic_hook, eyre_hook) = color_eyre::config::HookBuilder::default() 7 .panic_section(format!( 8 "This is a bug. Please report it at {}", 9 env!("CARGO_PKG_REPOSITORY") 10 )) 11 .capture_span_trace_by_default(false) 12 .display_location_section(false) 13 .display_env_section(false) 14 .into_hooks(); 15 16 eyre_hook.install()?; 17 std::panic::set_hook(Box::new(move |panic_info| { 18 //TODO: exit from terminal if the app is in a terminal 19 20 // in release mode, do human_panic printing 21 #[cfg(not(debug_assertions))] 22 { 23 use human_panic::{handle_dump, metadata, print_msg}; 24 let metadata = metadata!(); 25 let file_path = handle_dump(&metadata, panic_info); 26 print_msg(file_path, &metadata) 27 .expect("human-panic: printing error message to console failed"); 28 eprintln!("{}", _panic_hook.panic_report(panic_info)); 29 } 30 31 // in debug mode do better panic printing 32 #[cfg(debug_assertions)] 33 { 34 better_panic::Settings::auto() 35 .most_recent_first(false) 36 .lineno_suffix(true) 37 .verbosity(better_panic::Verbosity::Full) 38 .create_panic_handler()(panic_info); 39 } 40 41 // 1 = failure 42 std::process::exit(1) 43 })); 44 45 Ok(()) 46} 47 48/// Akin to `dbg!` macro, except that it generates `tracing::Event`s instead 49/// of printing to standard error. 50/// 51/// Can customize level by providing a `tracing::Level`, but its debug by default. 52#[macro_export] 53macro_rules! trace_dbg { 54 (target: $target:expr, level: $level:expr, $ex:expr) => { 55 { 56 match $ex { 57 value => { 58 tracing::event!(target: $target, $level, ?value, stringify!($ex)); 59 value 60 } 61 } 62 } 63 }; 64 (level: $level:expr, $ex:expr) => { 65 trace_dbg!(target: module_path!(), level: $level, $ex) 66 }; 67 68 (target: $target:expr, $ex:expr) => { 69 trace_dbg!(target: $target, level: tracing::Level::DEBUG, $ex) 70 }; 71 ($ex:expr) => { 72 trace_dbg!(level: tracing::Level::DEBUG, $ex) 73 }; 74}