My personal project and infrastructure archive
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nomicon/apps/servers/octopus/src/templ_data/repo.rs

80 lines
1.8 KiB

//! Repository specific template data
use std::collections::BTreeMap;
/// A simple overview of a repository
///
/// This type can be generated by the octopus Repository state wrapper
#[derive(Clone)]
pub(crate) struct RepoData {
pub owner: String,
pub name: String,
pub tagline: String,
pub num_commit: usize,
pub num_branch: usize,
pub num_tag: usize,
pub num_contributor: usize,
pub size: String,
pub logo: String,
}
/// Data about an individual commit
#[derive(Clone)]
pub(crate) struct CommitData {
pub hash: String,
pub message: String,
pub author: String,
pub date: String,
pub diff: (usize, usize),
}
/// Data about a branch
#[derive(Clone)]
pub(crate) struct BranchData {
pub name: String,
pub last_commit: CommitData,
}
/// Data about a repository tree
#[derive(Clone)]
pub(crate) struct TreeData {
/// The path segments in the current directory
curr_dir: Vec<String>,
/// The set of children in this tree segment
files: BTreeMap<String, FileData>,
}
/// Information about a concrete file in a tree
#[derive(Clone)]
pub(crate) struct FileData {
name: String,
last_commit: CommitData,
is_directory: bool,
}
pub(crate) mod pages {
use super::*;
use crate::templ_data::BaseData;
use askama::Template;
#[derive(Template)]
#[template(path = "repo/about.html")]
pub(crate) struct About {
pub base: BaseData,
pub repo: RepoData,
// Template specific
pub readme: String,
}
#[derive(Template)]
#[template(path = "repo/details.html")]
pub(crate) struct Details {
pub base: BaseData,
pub repo: RepoData,
// Template specifics
pub branches: Vec<BranchData>,
pub commits: Vec<CommitData>,
}
}