1use super::{UnicodeProvider, UnicodeTheme};
5
6#[derive(Debug, Clone, Copy)]
8pub enum GitStatus {
9 Modified,
11 Added,
13 Deleted,
15 Renamed,
17 Copied,
19 Untracked,
21 Staged,
23 Ignored,
25 Conflicted,
27 Unchanged,
29}
30
31impl UnicodeProvider for GitStatus {
32 fn get_char(&self, theme: UnicodeTheme) -> char {
33 match (self, theme) {
34 (GitStatus::Modified, UnicodeTheme::Minimal) => 'M',
35 (GitStatus::Modified, UnicodeTheme::Basic) => '●',
36 (GitStatus::Modified, UnicodeTheme::Rich) => '●',
37 (GitStatus::Modified, UnicodeTheme::Fancy) => '◐',
38
39 (GitStatus::Added, UnicodeTheme::Minimal) => '+',
40 (GitStatus::Added, UnicodeTheme::Basic) => '+',
41 (GitStatus::Added, UnicodeTheme::Rich) => '✚',
42 (GitStatus::Added, UnicodeTheme::Fancy) => '⊕',
43
44 (GitStatus::Deleted, UnicodeTheme::Minimal) => '-',
45 (GitStatus::Deleted, UnicodeTheme::Basic) => '-',
46 (GitStatus::Deleted, UnicodeTheme::Rich) => '✖',
47 (GitStatus::Deleted, UnicodeTheme::Fancy) => '⊖',
48
49 (GitStatus::Renamed, UnicodeTheme::Minimal) => 'R',
50 (GitStatus::Renamed, UnicodeTheme::Basic) => '>',
51 (GitStatus::Renamed, UnicodeTheme::Rich) => '➜',
52 (GitStatus::Renamed, UnicodeTheme::Fancy) => '⤷',
53
54 (GitStatus::Copied, UnicodeTheme::Minimal) => 'C',
55 (GitStatus::Copied, UnicodeTheme::Basic) => '=',
56 (GitStatus::Copied, UnicodeTheme::Rich) => '⧉',
57 (GitStatus::Copied, UnicodeTheme::Fancy) => '⎘',
58
59 (GitStatus::Untracked, UnicodeTheme::Minimal) => '?',
60 (GitStatus::Untracked, UnicodeTheme::Basic) => '?',
61 (GitStatus::Untracked, UnicodeTheme::Rich) => '?',
62 (GitStatus::Untracked, UnicodeTheme::Fancy) => '❓',
63
64 (GitStatus::Staged, UnicodeTheme::Minimal) => 'S',
65 (GitStatus::Staged, UnicodeTheme::Basic) => '*',
66 (GitStatus::Staged, UnicodeTheme::Rich) => '✓',
67 (GitStatus::Staged, UnicodeTheme::Fancy) => '✅',
68
69 (GitStatus::Ignored, UnicodeTheme::Minimal) => 'I',
70 (GitStatus::Ignored, UnicodeTheme::Basic) => '.',
71 (GitStatus::Ignored, UnicodeTheme::Rich) => '⊘',
72 (GitStatus::Ignored, UnicodeTheme::Fancy) => '🚫',
73
74 (GitStatus::Conflicted, UnicodeTheme::Minimal) => '!',
75 (GitStatus::Conflicted, UnicodeTheme::Basic) => '!',
76 (GitStatus::Conflicted, UnicodeTheme::Rich) => '⚠',
77 (GitStatus::Conflicted, UnicodeTheme::Fancy) => '⚡',
78
79 (GitStatus::Unchanged, _) => ' ',
80 }
81 }
82}
83
84#[derive(Debug, Clone, Copy)]
86pub enum GitDiff {
87 Added,
89 Removed,
91 Modified,
93 Context,
95 NoNewline,
97}
98
99impl UnicodeProvider for GitDiff {
100 fn get_char(&self, theme: UnicodeTheme) -> char {
101 match (self, theme) {
102 (GitDiff::Added, UnicodeTheme::Minimal) => '+',
103 (GitDiff::Added, UnicodeTheme::Basic) => '+',
104 (GitDiff::Added, UnicodeTheme::Rich) => '▎',
105 (GitDiff::Added, UnicodeTheme::Fancy) => '┃',
106
107 (GitDiff::Removed, UnicodeTheme::Minimal) => '-',
108 (GitDiff::Removed, UnicodeTheme::Basic) => '-',
109 (GitDiff::Removed, UnicodeTheme::Rich) => '▁',
110 (GitDiff::Removed, UnicodeTheme::Fancy) => '━',
111
112 (GitDiff::Modified, UnicodeTheme::Minimal) => '~',
113 (GitDiff::Modified, UnicodeTheme::Basic) => '~',
114 (GitDiff::Modified, UnicodeTheme::Rich) => '▎',
115 (GitDiff::Modified, UnicodeTheme::Fancy) => '┃',
116
117 (GitDiff::Context, _) => ' ',
118
119 (GitDiff::NoNewline, UnicodeTheme::Minimal) => '\\',
120 (GitDiff::NoNewline, UnicodeTheme::Basic) => '\\',
121 (GitDiff::NoNewline, UnicodeTheme::Rich) => '⏎',
122 (GitDiff::NoNewline, UnicodeTheme::Fancy) => '↵',
123 }
124 }
125}
126
127#[derive(Debug, Clone, Copy)]
129pub enum GitBranch {
130 Current,
132 Remote,
134 Local,
136 Detached,
138 Ahead,
140 Behind,
142 Diverged,
144}
145
146impl UnicodeProvider for GitBranch {
147 fn get_char(&self, theme: UnicodeTheme) -> char {
148 match (self, theme) {
149 (GitBranch::Current, UnicodeTheme::Minimal) => '*',
150 (GitBranch::Current, UnicodeTheme::Basic) => '*',
151 (GitBranch::Current, UnicodeTheme::Rich) => '●',
152 (GitBranch::Current, UnicodeTheme::Fancy) => '🌿',
153
154 (GitBranch::Remote, UnicodeTheme::Minimal) => 'R',
155 (GitBranch::Remote, UnicodeTheme::Basic) => '@',
156 (GitBranch::Remote, UnicodeTheme::Rich) => '⭐',
157 (GitBranch::Remote, UnicodeTheme::Fancy) => '☁',
158
159 (GitBranch::Local, UnicodeTheme::Minimal) => 'L',
160 (GitBranch::Local, UnicodeTheme::Basic) => '|',
161 (GitBranch::Local, UnicodeTheme::Rich) => '⎇',
162 (GitBranch::Local, UnicodeTheme::Fancy) => '🌱',
163
164 (GitBranch::Detached, UnicodeTheme::Minimal) => 'D',
165 (GitBranch::Detached, UnicodeTheme::Basic) => '?',
166 (GitBranch::Detached, UnicodeTheme::Rich) => '⚠',
167 (GitBranch::Detached, UnicodeTheme::Fancy) => '🔗',
168
169 (GitBranch::Ahead, UnicodeTheme::Minimal) => '^',
170 (GitBranch::Ahead, UnicodeTheme::Basic) => '^',
171 (GitBranch::Ahead, UnicodeTheme::Rich) => '↑',
172 (GitBranch::Ahead, UnicodeTheme::Fancy) => '⬆',
173
174 (GitBranch::Behind, UnicodeTheme::Minimal) => 'v',
175 (GitBranch::Behind, UnicodeTheme::Basic) => 'v',
176 (GitBranch::Behind, UnicodeTheme::Rich) => '↓',
177 (GitBranch::Behind, UnicodeTheme::Fancy) => '⬇',
178
179 (GitBranch::Diverged, UnicodeTheme::Minimal) => '<',
180 (GitBranch::Diverged, UnicodeTheme::Basic) => '<',
181 (GitBranch::Diverged, UnicodeTheme::Rich) => '↕',
182 (GitBranch::Diverged, UnicodeTheme::Fancy) => '🔀',
183 }
184 }
185}
186
187#[derive(Debug, Clone, Copy)]
189pub enum GitAction {
190 Stage,
192 Unstage,
194 Commit,
196 Push,
198 Pull,
200 Merge,
202 Rebase,
204 CherryPick,
206 Stash,
208 Tag,
210}
211
212impl UnicodeProvider for GitAction {
213 fn get_char(&self, theme: UnicodeTheme) -> char {
214 match (self, theme) {
215 (GitAction::Stage, UnicodeTheme::Minimal) => '+',
216 (GitAction::Stage, UnicodeTheme::Basic) => '+',
217 (GitAction::Stage, UnicodeTheme::Rich) => '⊕',
218 (GitAction::Stage, UnicodeTheme::Fancy) => '📥',
219
220 (GitAction::Unstage, UnicodeTheme::Minimal) => '-',
221 (GitAction::Unstage, UnicodeTheme::Basic) => '-',
222 (GitAction::Unstage, UnicodeTheme::Rich) => '⊖',
223 (GitAction::Unstage, UnicodeTheme::Fancy) => '📤',
224
225 (GitAction::Commit, UnicodeTheme::Minimal) => 'C',
226 (GitAction::Commit, UnicodeTheme::Basic) => '*',
227 (GitAction::Commit, UnicodeTheme::Rich) => '✓',
228 (GitAction::Commit, UnicodeTheme::Fancy) => '💾',
229
230 (GitAction::Push, UnicodeTheme::Minimal) => '^',
231 (GitAction::Push, UnicodeTheme::Basic) => '^',
232 (GitAction::Push, UnicodeTheme::Rich) => '↑',
233 (GitAction::Push, UnicodeTheme::Fancy) => '🚀',
234
235 (GitAction::Pull, UnicodeTheme::Minimal) => 'v',
236 (GitAction::Pull, UnicodeTheme::Basic) => 'v',
237 (GitAction::Pull, UnicodeTheme::Rich) => '↓',
238 (GitAction::Pull, UnicodeTheme::Fancy) => '⬇',
239
240 (GitAction::Merge, UnicodeTheme::Minimal) => 'M',
241 (GitAction::Merge, UnicodeTheme::Basic) => '&',
242 (GitAction::Merge, UnicodeTheme::Rich) => '⚡',
243 (GitAction::Merge, UnicodeTheme::Fancy) => '🔀',
244
245 (GitAction::Rebase, UnicodeTheme::Minimal) => 'R',
246 (GitAction::Rebase, UnicodeTheme::Basic) => '~',
247 (GitAction::Rebase, UnicodeTheme::Rich) => '⤴',
248 (GitAction::Rebase, UnicodeTheme::Fancy) => '🔄',
249
250 (GitAction::CherryPick, UnicodeTheme::Minimal) => 'P',
251 (GitAction::CherryPick, UnicodeTheme::Basic) => 'o',
252 (GitAction::CherryPick, UnicodeTheme::Rich) => '🍒',
253 (GitAction::CherryPick, UnicodeTheme::Fancy) => '🍒',
254
255 (GitAction::Stash, UnicodeTheme::Minimal) => 'S',
256 (GitAction::Stash, UnicodeTheme::Basic) => '#',
257 (GitAction::Stash, UnicodeTheme::Rich) => '📦',
258 (GitAction::Stash, UnicodeTheme::Fancy) => '📦',
259
260 (GitAction::Tag, UnicodeTheme::Minimal) => 'T',
261 (GitAction::Tag, UnicodeTheme::Basic) => '@',
262 (GitAction::Tag, UnicodeTheme::Rich) => '🏷',
263 (GitAction::Tag, UnicodeTheme::Fancy) => '🏷',
264 }
265 }
266}
267
268pub mod chars {
270 use super::*;
271
272 pub const MODIFIED: GitStatus = GitStatus::Modified;
274 pub const ADDED: GitStatus = GitStatus::Added;
275 pub const DELETED: GitStatus = GitStatus::Deleted;
276 pub const RENAMED: GitStatus = GitStatus::Renamed;
277 pub const COPIED: GitStatus = GitStatus::Copied;
278 pub const UNTRACKED: GitStatus = GitStatus::Untracked;
279 pub const STAGED: GitStatus = GitStatus::Staged;
280 pub const IGNORED: GitStatus = GitStatus::Ignored;
281 pub const CONFLICTED: GitStatus = GitStatus::Conflicted;
282 pub const UNCHANGED: GitStatus = GitStatus::Unchanged;
283
284 pub const DIFF_ADDED: GitDiff = GitDiff::Added;
286 pub const DIFF_REMOVED: GitDiff = GitDiff::Removed;
287 pub const DIFF_MODIFIED: GitDiff = GitDiff::Modified;
288 pub const DIFF_CONTEXT: GitDiff = GitDiff::Context;
289 pub const DIFF_NO_NEWLINE: GitDiff = GitDiff::NoNewline;
290
291 pub const BRANCH_CURRENT: GitBranch = GitBranch::Current;
293 pub const BRANCH_REMOTE: GitBranch = GitBranch::Remote;
294 pub const BRANCH_LOCAL: GitBranch = GitBranch::Local;
295 pub const BRANCH_DETACHED: GitBranch = GitBranch::Detached;
296 pub const BRANCH_AHEAD: GitBranch = GitBranch::Ahead;
297 pub const BRANCH_BEHIND: GitBranch = GitBranch::Behind;
298 pub const BRANCH_DIVERGED: GitBranch = GitBranch::Diverged;
299
300 pub const ACTION_STAGE: GitAction = GitAction::Stage;
302 pub const ACTION_UNSTAGE: GitAction = GitAction::Unstage;
303 pub const ACTION_COMMIT: GitAction = GitAction::Commit;
304 pub const ACTION_PUSH: GitAction = GitAction::Push;
305 pub const ACTION_PULL: GitAction = GitAction::Pull;
306 pub const ACTION_MERGE: GitAction = GitAction::Merge;
307 pub const ACTION_REBASE: GitAction = GitAction::Rebase;
308 pub const ACTION_CHERRY_PICK: GitAction = GitAction::CherryPick;
309 pub const ACTION_STASH: GitAction = GitAction::Stash;
310 pub const ACTION_TAG: GitAction = GitAction::Tag;
311}