use std::fs::File;
use std::io::BufWriter;
use std::path::Path;
use crate::core::{Error, Result};
use super::stage::{Staged, ensure_new};
pub(crate) fn create_new(
path: &Path,
write: impl FnOnce(&mut BufWriter<File>) -> Result<()>,
) -> Result<()> {
Staged::new(path, write)?.install()
}
pub(crate) fn create_pair(
first_path: &Path,
first_write: impl FnOnce(&mut BufWriter<File>) -> Result<()>,
second_path: &Path,
second_write: impl FnOnce(&mut BufWriter<File>) -> Result<()>,
) -> Result<()> {
if first_path == second_path {
return Err(Error::new("E_USAGE", "paired outputs need distinct paths"));
}
ensure_new(first_path)?;
ensure_new(second_path)?;
let first = Staged::new(first_path, first_write)?;
let second = Staged::new(second_path, second_write)?;
first.install()?;
second.install().map_err(|error| {
Error::new(
error.code,
format!(
"{} was created, but {} could not be installed: {}",
first_path.display(),
second_path.display(),
error.message
),
)
})
}