@@ -4,9 +4,15 @@ use term::attr::{Attr, Bold};
4
4
use std:: io:: { IoResult , stderr} ;
5
5
use std:: fmt:: Show ;
6
6
7
+ pub enum Verbosity {
8
+ Verbose ,
9
+ Normal ,
10
+ Quiet
11
+ }
12
+
7
13
pub struct ShellConfig {
8
14
pub color : bool ,
9
- pub verbose : bool ,
15
+ pub verbosity : Verbosity ,
10
16
pub tty : bool
11
17
}
12
18
@@ -23,7 +29,7 @@ pub struct Shell {
23
29
pub struct MultiShell {
24
30
out : Shell ,
25
31
err : Shell ,
26
- verbose : bool
32
+ verbose : Verbosity
27
33
}
28
34
29
35
pub type Callback < ' a > = |& mut MultiShell |: ' a -> IoResult <( ) >;
@@ -33,8 +39,8 @@ struct UghWhyIsThisNecessary {
33
39
}
34
40
35
41
impl MultiShell {
36
- pub fn new ( out : Shell , err : Shell , verbose : bool ) -> MultiShell {
37
- MultiShell { out : out, err : err, verbose : verbose }
42
+ pub fn new ( out : Shell , err : Shell , verbosity : Verbosity ) -> MultiShell {
43
+ MultiShell { out : out, err : err, verbosity : verbosity }
38
44
}
39
45
40
46
pub fn out ( & mut self ) -> & mut Shell {
@@ -54,13 +60,17 @@ impl MultiShell {
54
60
}
55
61
56
62
pub fn verbose ( & mut self , callback : Callback ) -> IoResult < ( ) > {
57
- if self . verbose { return callback ( self ) }
58
- Ok ( ( ) )
63
+ match self . verbosity {
64
+ Verbose => return callback ( self ) ,
65
+ _ => Ok ( ( ) )
66
+ }
59
67
}
60
68
61
69
pub fn concise ( & mut self , callback : Callback ) -> IoResult < ( ) > {
62
- if !self . verbose { return callback ( self ) }
63
- Ok ( ( ) )
70
+ match self . verbosity {
71
+ Verbose => Ok ( ( ) ) ,
72
+ _ => return callback ( self )
73
+ }
64
74
}
65
75
66
76
pub fn error < T : ToString > ( & mut self , message : T ) -> IoResult < ( ) > {
@@ -71,8 +81,17 @@ impl MultiShell {
71
81
self . err ( ) . say ( message, YELLOW )
72
82
}
73
83
84
+ pub fn set_verbosity ( & mut self , verbosity : Verbosity ) {
85
+ self . verbosity = verbosity;
86
+ }
87
+
88
+ /// shortcut for commands that don't have both --verbose and --quiet
74
89
pub fn set_verbose ( & mut self , verbose : bool ) {
75
- self . verbose = verbose;
90
+ if verbose {
91
+ self . verbosity = Verbose ;
92
+ } else {
93
+ self . verbosity = Normal ;
94
+ }
76
95
}
77
96
}
78
97
@@ -95,13 +114,17 @@ impl Shell {
95
114
}
96
115
97
116
pub fn verbose ( & mut self , callback : ShellCallback ) -> IoResult < ( ) > {
98
- if self . config . verbose { return callback ( self ) }
99
- Ok ( ( ) )
117
+ match self . config . verbosity {
118
+ Verbose => return callback ( self ) ,
119
+ _ => Ok ( ( ) )
120
+ }
100
121
}
101
122
102
123
pub fn concise ( & mut self , callback : ShellCallback ) -> IoResult < ( ) > {
103
- if !self . config . verbose { return callback ( self ) }
104
- Ok ( ( ) )
124
+ match self . config . verbosity {
125
+ Verbose => Ok ( ( ) ) ,
126
+ _ => return callback ( self )
127
+ }
105
128
}
106
129
107
130
pub fn say < T : ToString > ( & mut self , message : T , color : Color ) -> IoResult < ( ) > {
0 commit comments