use crate::domain::{changeset::Changeset, ports::OutputWriter};
use anyhow::Result;
use std::fs;
use self::{html::HtmlWriter, json::JsonWriter, sql::SqlWriter};
pub mod html;
pub mod json;
pub mod sql;
pub fn all_writers() -> Vec<Box<dyn OutputWriter>> {
vec![
Box::new(JsonWriter),
Box::new(SqlWriter),
Box::new(HtmlWriter),
]
}
pub fn writer_for(format: &str) -> Option<Box<dyn OutputWriter>> {
match format {
"json" => Some(Box::new(JsonWriter)),
"sql" => Some(Box::new(SqlWriter)),
"html" => Some(Box::new(HtmlWriter)),
_ => None,
}
}
pub fn write_to_file(writer: &dyn OutputWriter, changeset: &Changeset, dir: &str) -> Result<()> {
fs::create_dir_all(dir)?;
let content = writer.format(changeset)?;
let path = format!("{}/{}.{}", dir, changeset.changeset_id, writer.extension());
fs::write(&path, &content)?;
Ok(())
}