cargo_fixit/core/
shell.rs1#![allow(dead_code)]
2
3use anyhow::Context;
4use clap::builder::styling::Style;
5use clap_cargo::style::{ERROR, HEADER, NOTE, WARN};
6use std::io::Write;
7
8use crate::CargoResult;
9
10pub fn status(action: &str, message: impl std::fmt::Display) -> CargoResult<()> {
12 print(action, message, HEADER, true)
13}
14
15pub fn error(message: impl std::fmt::Display) -> CargoResult<()> {
17 print("error", message, ERROR, false)
18}
19
20pub fn warn(message: impl std::fmt::Display) -> CargoResult<()> {
22 print("warning", message, WARN, false)
23}
24
25pub fn note(message: impl std::fmt::Display) -> CargoResult<()> {
27 print("note", message, NOTE, false)
28}
29
30pub fn fixed(file_name: impl std::fmt::Display, fixes: u32) -> CargoResult<()> {
32 status(
33 "Fixed",
34 format!(
35 "{file_name} ({fixes} {})",
36 if fixes == 1 { "fix" } else { "fixes" }
37 ),
38 )
39}
40
41pub fn print_ansi_stderr(message: &[u8]) -> CargoResult<()> {
42 let mut stderr = anstream::stderr().lock();
43 stderr.write_all(message)?;
44 Ok(())
45}
46
47fn print(
49 status: &str,
50 message: impl std::fmt::Display,
51 style: Style,
52 justified: bool,
53) -> CargoResult<()> {
54 let mut stderr = anstream::stderr().lock();
55 if justified {
56 write!(stderr, "{style}{status:>12}{style:#}")?;
57 } else {
58 write!(stderr, "{style}{status}{style:#}:")?;
59 }
60
61 writeln!(stderr, " {message:#}").with_context(|| "Failed to write message")?;
62
63 Ok(())
64}