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
extern crate spinner;
#[macro_use]
extern crate lazy_static;
extern crate strum;
#[macro_use]
extern crate strum_macros;
mod spinner_data;
mod spinners_data;
mod spinner_names;
use std::time::Duration;
pub use spinner_names::SpinnerNames as Spinners;
pub use spinners_data::SPINNERS as RawSpinners;
pub struct Spinner {
handle: spinner::SpinnerHandle,
}
impl Spinner {
pub fn new(spinner: Spinners, message: String) -> Self {
let spinner_name = format!("{:?}", spinner);
let spinner_data = RawSpinners
.iter()
.find(|x| x.name == spinner_name)
.take()
.unwrap()
.clone();
let handle = spinner::SpinnerBuilder::new(message)
.spinner(spinner_data.frames.clone())
.step(Duration::from_millis(spinner_data.interval.into()))
.start();
Spinner { handle: handle }
}
pub fn message(&self, message: String) -> Option<String> {
self.handle.update(message)
}
pub fn stop(self) {
self.handle.close();
}
}