@@ -4,24 +4,28 @@ use crate::fmt::{WritableTarget, WriteStyle};
4
4
5
5
pub ( in crate :: fmt:: writer) struct BufferWriter {
6
6
target : WritableTarget ,
7
+ is_test : bool ,
7
8
}
8
9
9
10
impl BufferWriter {
10
- pub ( in crate :: fmt:: writer) fn stderr ( _is_test : bool , _write_style : WriteStyle ) -> Self {
11
+ pub ( in crate :: fmt:: writer) fn stderr ( is_test : bool , _write_style : WriteStyle ) -> Self {
11
12
BufferWriter {
12
13
target : WritableTarget :: Stderr ,
14
+ is_test,
13
15
}
14
16
}
15
17
16
- pub ( in crate :: fmt:: writer) fn stdout ( _is_test : bool , _write_style : WriteStyle ) -> Self {
18
+ pub ( in crate :: fmt:: writer) fn stdout ( is_test : bool , _write_style : WriteStyle ) -> Self {
17
19
BufferWriter {
18
20
target : WritableTarget :: Stdout ,
21
+ is_test,
19
22
}
20
23
}
21
24
22
25
pub ( in crate :: fmt:: writer) fn pipe ( pipe : Box < Mutex < dyn io:: Write + Send + ' static > > ) -> Self {
23
26
BufferWriter {
24
27
target : WritableTarget :: Pipe ( pipe) ,
28
+ is_test : false ,
25
29
}
26
30
}
27
31
@@ -34,14 +38,22 @@ impl BufferWriter {
34
38
}
35
39
36
40
pub ( in crate :: fmt:: writer) fn print ( & self , buf : & Buffer ) -> io:: Result < ( ) > {
41
+ use std:: io:: Write as _;
42
+
37
43
// This impl uses the `eprint` and `print` macros
38
44
// instead of using the streams directly.
39
45
// This is so their output can be captured by `cargo test`.
40
- match & self . target {
46
+ match ( & self . target , self . is_test ) {
41
47
// Safety: If the target type is `Pipe`, `target_pipe` will always be non-empty.
42
- WritableTarget :: Pipe ( pipe) => pipe. lock ( ) . unwrap ( ) . write_all ( & buf. 0 ) ?,
43
- WritableTarget :: Stdout => print ! ( "{}" , String :: from_utf8_lossy( & buf. 0 ) ) ,
44
- WritableTarget :: Stderr => eprint ! ( "{}" , String :: from_utf8_lossy( & buf. 0 ) ) ,
48
+ ( WritableTarget :: Pipe ( pipe) , _) => pipe. lock ( ) . unwrap ( ) . write_all ( & buf. 0 ) ?,
49
+ ( WritableTarget :: Stdout , true ) => print ! ( "{}" , String :: from_utf8_lossy( & buf. 0 ) ) ,
50
+ ( WritableTarget :: Stdout , false ) => {
51
+ write ! ( std:: io:: stdout( ) , "{}" , String :: from_utf8_lossy( & buf. 0 ) ) ?
52
+ }
53
+ ( WritableTarget :: Stderr , true ) => eprint ! ( "{}" , String :: from_utf8_lossy( & buf. 0 ) ) ,
54
+ ( WritableTarget :: Stderr , false ) => {
55
+ write ! ( std:: io:: stderr( ) , "{}" , String :: from_utf8_lossy( & buf. 0 ) ) ?
56
+ }
45
57
}
46
58
47
59
Ok ( ( ) )
0 commit comments