1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use std::collections::HashMap;
use lazy_static::lazy_static;
use maplit::hashmap;
use strum::{Display, EnumIter, EnumString};
use crate::Error;
#[derive(Debug, Clone, Copy, EnumIter, Display, EnumString)]
#[strum(serialize_all = "camelCase")]
pub enum Spinners {
Dots,
Dots2,
Dots3,
Dots4,
Dots5,
Dots6,
Dots7,
Dots8,
Dots9,
Dots10,
Dots11,
Pipe,
Star,
Star2,
Flip,
Hamburger,
GrowVertical,
GrowHorizontal,
Balloon,
Balloon2,
Noise,
Bounce,
BoxBounce,
BoxBounce2,
Triangle,
Arc,
Circle,
SquareCorners,
CircleQuaters,
CircleHalves,
Squish,
Toggle,
Toggle2,
Toggle3,
Toggle4,
Toggle5,
Toggle6,
Toggle7,
Toggle8,
Toggle9,
Toggle10,
Toggle11,
Toggle12,
Toggle13,
Arrow,
}
impl Spinners {
pub fn get_frames(&self) -> Result<Vec<char>, Error> {
if let Some(frames) = SPINNER_MAP.get(&self.to_string()) {
Ok(frames.chars().collect())
} else {
Err(Error::UnknownSpinner(self.to_string()))
}
}
}
lazy_static! {
pub(crate) static ref SPINNER_MAP: HashMap<String, &'static str> = {
hashmap! {
"dots".into() => "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏",
"dots2".into() => "⣾⣽⣻⢿⡿⣟⣯⣷",
"dots3".into() => "⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓",
"dots4".into() => "⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆",
"dots5".into() => "⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋",
"dots6".into() => "⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁",
"dots7".into() => "⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈",
"dots8".into() => "⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈",
"dots9".into() => "⢹⢺⢼⣸⣇⡧⡗⡏",
"dots10".into() => "⢄⢂⢁⡁⡈⡐⡠",
"dots11".into() => "⠁⠂⠄⡀⢀⠠⠐⠈",
"pipe".into() => "┤┘┴└├┌┬┐",
"star".into() => "✶✸✹✺✹✷",
"star2".into() => "+x*",
"flip".into() => "___-``'´-___",
"hamburger".into() => "☱☲☴",
"growVertical".into() => "▁▃▄▅▆▇▆▅▄▃",
"growHorizontal".into() => "▏▎▍▌▋▊▉▊▋▌▍▎",
"balloon".into() => ".into() .oO@* ",
"balloon2".into() => ".oO°Oo.",
"noise".into() => "▓▒░",
"bounce".into() => "⠁⠂⠄⠂",
"boxBounce".into() => "▖▘▝▗",
"boxBounce2".into() => "▌▀▐▄",
"triangle".into() => "◢◣◤◥",
"arc".into() => "◜◠◝◞◡◟",
"circle".into() => "◡⊙◠",
"squareCorners".into() => "◰◳◲◱",
"circleQuaters".into() => "◴◷◶◵",
"circleHalves".into() => "◐◓◑◒",
"squish".into() => "╫╪",
"toggle".into() => "⊶⊷",
"toggle2".into() => "▫▪",
"toggle3".into() => "□■",
"toggle4".into() => "■□▪▫",
"toggle5".into() => "▮▯",
"toggle6".into() => "ဝ၀",
"toggle7".into() => "⦾⦿",
"toggle8".into() => "◍◌",
"toggle9".into() => "◉◎",
"toggle10".into() => "㊂㊀㊁",
"toggle11".into() => "⧇⧆",
"toggle12".into() => "☗☖",
"toggle13".into() => "=*-",
"arrow".into() => "←↖↑↗→↘↓↙"
}
};
}