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
use std::fmt;
use std::io::prelude::*;
use term;
pub fn error(message: &str) {
if let Some(mut t) = term::stderr() {
match t.fg(term::color::BRIGHT_RED) {
Ok(_) => {
write!(t, "{}", message).unwrap();
t.reset().unwrap();
}
Err(_) => writeln!(t, "{}", message).unwrap(),
};
} else {
eprint!("{}", message);
}
}
pub fn success(message: &str) {
if let Some(mut t) = term::stdout() {
match t.fg(term::color::BRIGHT_GREEN) {
Ok(_) => {
write!(t, "{}", message).unwrap();
t.reset().unwrap();
}
Err(_) => writeln!(t, "{}", message).unwrap(),
};
} else {
eprint!("{}", message);
}
}
pub fn bold(message: &str) {
if let Some(mut t) = term::stdout() {
match t.attr(term::Attr::Bold) {
Ok(_) => {
write!(t, "{}", message).unwrap();
t.reset().unwrap();
}
Err(_) => write!(t, "{}", message).unwrap(),
};
} else {
eprint!("{}", message);
}
}
pub fn basic_question<T: fmt::Display>(prompt: &str, default: &T, validation: &Option<String>) {
if let Some(mut t) = term::stdout() {
if !t.supports_color() || !t.supports_attr(term::Attr::Bold) {
if let Some(ref pattern) = validation {
write!(t, "{} [default: {}, validation: {}]: ", prompt, default, pattern).unwrap();
} else {
write!(t, "{} [default: {}]: ", prompt, default).unwrap();
}
return;
}
t.attr(term::Attr::Bold).unwrap();
write!(t, "{} ", prompt).unwrap();
t.reset().unwrap();
t.fg(term::color::YELLOW).unwrap();
if let Some(ref pattern) = validation {
write!(t, "[default: {}, validation: {}]: ", default, pattern).unwrap();
} else {
write!(t, "[default: {}]: ", default).unwrap();
}
t.reset().unwrap();
} else {
eprint!("{} [default: {}]: ", prompt, default);
}
}
pub fn bool_question(prompt: &str, default: bool) {
let default_str = if default { "[Y/n]" } else { "[y/N]" };
if let Some(mut t) = term::stdout() {
if !t.supports_color() || !t.supports_attr(term::Attr::Bold) {
write!(t, "{} {}: ", prompt, default_str).unwrap();
return;
}
t.attr(term::Attr::Bold).unwrap();
write!(t, "{} ", prompt).unwrap();
t.reset().unwrap();
t.fg(term::color::YELLOW).unwrap();
if default {
write!(t, "[Y/n]: ").unwrap()
} else {
write!(t, "[y/N]: ").unwrap()
}
t.reset().unwrap();
} else {
eprint!("{} {}: ", prompt, default_str);
}
}