gitscope
← rgit / 0.1.2 / src/methods/repo/tag.rs
https://dev.kronoz.win/r/rgit.git
src/methods/repo/tag.rs · Rust
Blame Raw
 1use std::sync::Arc;
 2
 3use askama::Template;
 4use axum::{extract::Query, response::Response, Extension};
 5use serde::Deserialize;
 6
 7use crate::{
 8    git::DetailedTag,
 9    into_response,
10    methods::repo::{Repository, RepositoryPath, Result},
11    Git,
12};
13
14#[derive(Deserialize)]
15pub struct UriQuery {
16    #[serde(rename = "h")]
17    name: String,
18}
19
20#[derive(Template)]
21#[template(path = "repo/tag.html")]
22pub struct View {
23    repo: Repository,
24    tag: DetailedTag,
25}
26
27pub async fn handle(
28    Extension(repo): Extension<Repository>,
29    Extension(RepositoryPath(repository_path)): Extension<RepositoryPath>,
30    Extension(git): Extension<Arc<Git>>,
31    Query(query): Query<UriQuery>,
32) -> Result<Response> {
33    let open_repo = git.repo(repository_path).await?;
34    let tag = open_repo.tag_info(&query.name).await?;
35
36    Ok(into_response(&View { repo, tag }))
37}