src/server/http/mod.rs
Ref: Size: 1.5 KiB
pub mod git_http;
pub mod repo_list;
pub mod repo;
use std::path::PathBuf;
use std::sync::Arc;
use axum::extract::DefaultBodyLimit;
use axum::Router;
#[derive(Debug, Clone)]
pub struct AppState {
pub repos_dir: PathBuf,
pub site_title: String,
}
pub fn router(state: AppState) -> Router {
let shared = Arc::new(state);
Router::new()
.route("/", axum::routing::get(repo_list::handler))
.route("/{repo_name}", axum::routing::get(repo::overview))
.route("/{repo_name}/commits", axum::routing::get(repo::commits))
.route("/{repo_name}/commits/{ref_name}", axum::routing::get(repo::commits_ref))
.route("/{repo_name}/tree", axum::routing::get(repo::tree_root))
.route("/{repo_name}/tree/{*rest}", axum::routing::get(repo::tree))
.route("/{repo_name}/blob/{*rest}", axum::routing::get(repo::blob))
.route("/{repo_name}/diff/{oid}", axum::routing::get(repo::diff))
.route("/{repo_name}/patches", axum::routing::get(repo::patches))
.route("/{repo_name}/patches/{id}", axum::routing::get(repo::patch_detail))
.route("/{repo_name}/issues", axum::routing::get(repo::issues))
.route("/{repo_name}/issues/{id}", axum::routing::get(repo::issue_detail))
.route("/{repo_dot_git}/info/refs", axum::routing::get(git_http::info_refs))
.route("/{repo_dot_git}/git-upload-pack", axum::routing::post(git_http::upload_pack)
.layer(DefaultBodyLimit::max(git_http::UPLOAD_PACK_BODY_LIMIT)))
.with_state(shared)
}