rust/src/emitter.rs
2019-08-16 11:14:53 +09:00

53 lines
1.2 KiB
Rust

pub(crate) use self::checkstyle::*;
pub(crate) use self::diff::*;
pub(crate) use self::files::*;
pub(crate) use self::files_with_backup::*;
pub(crate) use self::json::*;
pub(crate) use self::modified_lines::*;
pub(crate) use self::stdout::*;
use crate::FileName;
use std::io::{self, Write};
use std::path::Path;
mod checkstyle;
mod diff;
mod files;
mod files_with_backup;
mod json;
mod modified_lines;
mod stdout;
pub(crate) struct FormattedFile<'a> {
pub(crate) filename: &'a FileName,
pub(crate) original_text: &'a str,
pub(crate) formatted_text: &'a str,
}
#[derive(Debug, Default, Clone)]
pub(crate) struct EmitterResult {
pub(crate) has_diff: bool,
}
pub(crate) trait Emitter {
fn emit_formatted_file(
&mut self,
output: &mut dyn Write,
formatted_file: FormattedFile<'_>,
) -> Result<EmitterResult, io::Error>;
fn emit_header(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
Ok(())
}
fn emit_footer(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
Ok(())
}
}
fn ensure_real_path(filename: &FileName) -> &Path {
match *filename {
FileName::Real(ref path) => path,
_ => panic!("cannot format `{}` and emit to files", filename),
}
}