use crate::panic::GoPanic;
use std::io::Write;
pub fn run_main(init: fn(), main: fn()) -> ! {
let result = std::panic::catch_unwind(|| {
init();
main();
});
match result {
Ok(()) => std::process::exit(0),
Err(payload) => {
let mut err = std::io::stderr().lock();
match payload.downcast::<GoPanic>() {
Ok(p) => {
let _ = err.write_all(b"panic: ");
let _ = err.write_all(p.text());
let _ = err.write_all(b"\n\ngoroutine 1 [running]:\n");
}
Err(_) => {
let _ = err.write_all(b"fatal error: unexpected Rust panic\n");
}
}
std::process::exit(2)
}
}
}