Skip to content

Commit 4de52e3

Browse files
committed
Lock stdout and buffer output before writing
1 parent a58b910 commit 4de52e3

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/main.rs

+18-14
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ mod process;
44

55
use colored::*;
66
use constants::Message;
7-
use ds::key_node::KeyNode;
8-
use ds::mismatch::Mismatch;
7+
use ds::{key_node::KeyNode, mismatch::Mismatch};
98
use serde_json;
10-
use std::fmt;
11-
use std::fs;
12-
use std::process as proc;
13-
use std::str::FromStr;
9+
use std::{
10+
fmt, fs,
11+
io::{self, Write},
12+
process as proc,
13+
str::FromStr,
14+
};
1415
use structopt::StructOpt;
1516

1617
const HELP: &str = r#"
@@ -88,28 +89,31 @@ fn display_output(result: Mismatch) {
8889
right_only_keys: KeyNode::Nil,
8990
keys_in_both: KeyNode::Nil,
9091
};
92+
93+
let stdout = io::stdout();
94+
let mut handle = io::BufWriter::new(stdout.lock());
9195
if no_mismatch == result {
92-
println!("{}", Message::NoMismatch);
96+
writeln!(handle, "{}", Message::NoMismatch).unwrap();
9397
} else {
9498
match result.keys_in_both {
9599
KeyNode::Node(_) => {
96100
let mut keys = Vec::new();
97101
result.keys_in_both.absolute_keys(&mut keys, None);
98-
println!("{}:", Message::Mismatch);
102+
writeln!(handle, "{}:", Message::Mismatch).unwrap();
99103
for key in keys {
100-
println!("{}", key);
104+
writeln!(handle, "{}", key).unwrap();
101105
}
102106
}
103-
KeyNode::Value(_, _) => println!("{}", Message::RootMismatch),
107+
KeyNode::Value(_, _) => writeln!(handle, "{}", Message::RootMismatch).unwrap(),
104108
KeyNode::Nil => (),
105109
}
106110
match result.left_only_keys {
107111
KeyNode::Node(_) => {
108112
let mut keys = Vec::new();
109113
result.left_only_keys.absolute_keys(&mut keys, None);
110-
println!("{}:", Message::LeftExtra);
114+
writeln!(handle, "{}:", Message::LeftExtra).unwrap();
111115
for key in keys {
112-
println!("{}", key.red().bold());
116+
writeln!(handle, "{}", key.red().bold()).unwrap();
113117
}
114118
}
115119
KeyNode::Value(_, _) => error_exit(Message::UnknownError),
@@ -119,9 +123,9 @@ fn display_output(result: Mismatch) {
119123
KeyNode::Node(_) => {
120124
let mut keys = Vec::new();
121125
result.right_only_keys.absolute_keys(&mut keys, None);
122-
println!("{}:", Message::RightExtra);
126+
writeln!(handle, "{}:", Message::RightExtra).unwrap();
123127
for key in keys {
124-
println!("{}", key.green().bold());
128+
writeln!(handle, "{}", key.green().bold()).unwrap();
125129
}
126130
}
127131
KeyNode::Value(_, _) => error_exit(Message::UnknownError),

0 commit comments

Comments
 (0)