gitscope
← rgit / 0.1.4 / src/methods/repo/about.rs
https://dev.kronoz.win/r/rgit.git
src/methods/repo/about.rs · Rust
Blame Raw
 1use std::sync::Arc;
 2
 3use askama::Template;
 4use axum::{extract::Query, response::IntoResponse, Extension};
 5use serde::Deserialize;
 6
 7use crate::{
 8    git::ReadmeFormat,
 9    into_response,
10    methods::{
11        filters,
12        repo::{Repository, RepositoryPath, Result},
13    },
14    Git,
15};
16
17#[derive(Deserialize)]
18pub struct UriQuery {
19    #[serde(rename = "h")]
20    pub branch: Option<Arc<str>>,
21}
22
23#[derive(Template)]
24#[template(path = "repo/about.html")]
25pub struct View {
26    repo: Repository,
27    readme: Option<(ReadmeFormat, Arc<str>)>,
28    branch: Option<Arc<str>>,
29}
30
31pub async fn handle(
32    Extension(repo): Extension<Repository>,
33    Extension(RepositoryPath(repository_path)): Extension<RepositoryPath>,
34    Extension(git): Extension<Arc<Git>>,
35    Query(query): Query<UriQuery>,
36) -> Result<impl IntoResponse> {
37    let open_repo = git
38        .clone()
39        .repo(repository_path, query.branch.clone())
40        .await?;
41    let readme = open_repo.readme().await?;
42
43    Ok(into_response(View {
44        repo,
45        readme,
46        branch: query.branch,
47    }))
48}