]> git.lizzy.rs Git - rust.git/blob - src/emitter.rs
Release 1.4.0
[rust.git] / src / emitter.rs
1 pub(crate) use self::checkstyle::*;
2 pub(crate) use self::diff::*;
3 pub(crate) use self::files::*;
4 pub(crate) use self::files_with_backup::*;
5 pub(crate) use self::modified_lines::*;
6 pub(crate) use self::stdout::*;
7 use crate::FileName;
8 use std::io::{self, Write};
9 use std::path::Path;
10
11 mod checkstyle;
12 mod diff;
13 mod files;
14 mod files_with_backup;
15 mod modified_lines;
16 mod stdout;
17
18 pub(crate) struct FormattedFile<'a> {
19     pub(crate) filename: &'a FileName,
20     pub(crate) original_text: &'a str,
21     pub(crate) formatted_text: &'a str,
22 }
23
24 #[derive(Debug, Default, Clone)]
25 pub(crate) struct EmitterResult {
26     pub(crate) has_diff: bool,
27 }
28
29 pub(crate) trait Emitter {
30     fn emit_formatted_file(
31         &self,
32         output: &mut dyn Write,
33         formatted_file: FormattedFile<'_>,
34     ) -> Result<EmitterResult, io::Error>;
35
36     fn emit_header(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
37         Ok(())
38     }
39
40     fn emit_footer(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
41         Ok(())
42     }
43 }
44
45 fn ensure_real_path(filename: &FileName) -> &Path {
46     match *filename {
47         FileName::Real(ref path) => path,
48         _ => panic!("cannot format `{}` and emit to files", filename),
49     }
50 }