en/src/main.rs

65 lines
1.6 KiB
Rust

use std::{backtrace, io, panic};
use en::{ONSET, syntax, dev};
#[tokio::main]
async fn main() -> io::Result<()> {
let args = syntax::arguments::Arguments::new().parse();
let address = args.make_address();
panic::set_hook(Box::new(|info| {
let payload = info
.payload_as_str()
.unwrap_or("No string payload. Is edition > 2021?");
let location = info.location().map_or_else(
|| "location unavailable".to_string(),
|s| format!("{}:{}:{}", s.file(), s.line(), s.column()),
);
eprintln!(" P! [{:?}] {location}: {payload}", ONSET.elapsed());
let trace = backtrace::Backtrace::capture();
if trace.status() == backtrace::BacktraceStatus::Captured {
eprintln!("\n Stack trace:\n{trace:#?}");
}
}));
let app = en::router::new();
let listener =
tokio::net::TcpListener::bind(&address).await.map_err(|e| {
dev::log(
&main,
&format!("Failed to create listener at {address}: {e:#?}"),
);
e
})?;
dev::log(
&main,
&format!(
"Listening on {}",
listener
.local_addr()
.map(|s| s.to_string())
.unwrap_or("<unknown>".to_string())
),
);
axum::serve(listener, app).await.map_err(|e| {
dev::log(&main, &format!("Failed to serve application: {e:#?}"));
io::Error::other(e)
})?;
Ok(())
}
#[cfg(test)]
mod tests {
#[test]
fn smoke() {
let e = true;
assert!(e);
}
}