Skip to main content

gitgraph_core/
models.rs

1use std::path::PathBuf;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6pub enum GitRefKind {
7    Head,
8    LocalBranch,
9    RemoteBranch,
10    Tag,
11    Stash,
12    Other,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct GitRef {
17    pub kind: GitRefKind,
18    pub name: String,
19    pub target: Option<String>,
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
23pub struct BranchInfo {
24    pub name: String,
25    pub full_ref: String,
26    pub is_remote: bool,
27    pub remote_name: Option<String>,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
31pub struct GraphEdge {
32    pub to_lane: usize,
33    pub parent_hash: String,
34}
35
36#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
37pub struct GraphRow {
38    pub hash: String,
39    pub short_hash: String,
40    pub parents: Vec<String>,
41    pub author_name: String,
42    pub author_email: String,
43    pub authored_unix: i64,
44    pub committed_unix: i64,
45    pub subject: String,
46    pub body: String,
47    pub refs: Vec<GitRef>,
48    pub lane: usize,
49    pub active_lane_count: usize,
50    pub edges: Vec<GraphEdge>,
51}
52
53#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
54pub struct GraphData {
55    pub repository: PathBuf,
56    pub generated_at_unix: i64,
57    pub query: GraphQuery,
58    pub commits: Vec<GraphRow>,
59    pub branches: Vec<BranchInfo>,
60}
61
62#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
63pub struct GraphQuery {
64    pub limit: usize,
65    pub skip: usize,
66    pub all_refs: bool,
67    pub include_stash_ref: bool,
68    pub additional_args: Vec<String>,
69}
70
71impl Default for GraphQuery {
72    fn default() -> Self {
73        Self {
74            limit: 15_000,
75            skip: 0,
76            all_refs: true,
77            include_stash_ref: true,
78            additional_args: Vec::new(),
79        }
80    }
81}
82
83#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
84pub struct CommitSearchQuery {
85    pub text: String,
86    pub case_sensitive: bool,
87    pub use_regex: bool,
88    pub file_path: Option<String>,
89    pub include_hash: bool,
90    pub include_subject: bool,
91    pub include_body: bool,
92    pub include_author: bool,
93    pub include_email: bool,
94    pub include_refs: bool,
95}
96
97impl Default for CommitSearchQuery {
98    fn default() -> Self {
99        Self {
100            text: String::new(),
101            case_sensitive: false,
102            use_regex: false,
103            file_path: None,
104            include_hash: true,
105            include_subject: true,
106            include_body: true,
107            include_author: true,
108            include_email: true,
109            include_refs: true,
110        }
111    }
112}
113
114#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
115pub struct BlameInfo {
116    pub file: PathBuf,
117    pub line: usize,
118    pub commit_hash: String,
119    pub author_name: String,
120    pub author_email: String,
121    pub author_time_unix: i64,
122    pub summary: String,
123}
124
125#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
126pub struct FileChange {
127    pub path: String,
128    pub added: Option<u32>,
129    pub removed: Option<u32>,
130}