1.1 KB
raw
mod app;
mod git;
pub use app::AppState;
mod highlight;
mod http_backend;
mod markdown;
mod middleware;
mod render;
mod routes;
mod templates;
use std::net::SocketAddr;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
)
.init();
let port: u16 = std::env::var("PORT")
.ok()
.and_then(|v| v.parse().ok())
.unwrap_or(8000);
let state = app::AppState::from_env();
let router = app::router(state);
let addr = SocketAddr::from(([0, 0, 0, 0], port));
let listener = tokio::net::TcpListener::bind(addr).await?;
tracing::info!("heartwood listening on http://{addr}");
// ConnectInfo so clone routes can pass REMOTE_ADDR to git http-backend.
axum::serve(
listener,
router.into_make_service_with_connect_info::<SocketAddr>(),
)
.await?;
Ok(())
}