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}