Skip to main content

common/
output.rs

1use crate::color::spec_color;
2use std::error::Error;
3use std::io::{Result, Write};
4use termcolor::{Color, WriteColor};
5
6pub fn write_error<O: Write + WriteColor, E: Error>(output: &mut O, error: &E) -> Result<()> {
7    output.set_color(&spec_color(Color::Red))?;
8    write!(output, "error:")?;
9    output.reset()?;
10    writeln!(output, " {}", error)
11}
12
13#[cfg(test)]
14pub mod tests {
15    use super::*;
16    use crate::testing::{ColoredOuput, OutputChunk};
17    use std::io::{self, ErrorKind};
18
19    #[test]
20    fn write_error() {
21        let mut output = ColoredOuput::new();
22        let error = io::Error::new(ErrorKind::InvalidData, "message");
23        super::write_error(&mut output, &error).unwrap();
24
25        assert_eq!(
26            output.chunks(),
27            &[
28                OutputChunk::color(Color::Red, "error:"),
29                OutputChunk::plain(" message\n")
30            ]
31        );
32    }
33}