use crate::error::{DealerError, DealerResult};
use crate::project::ProjectRoot;
use crate::workflow::layout::BuildLayout;
pub(crate) fn run_clean_or_exit(project: &ProjectRoot) {
exit_on_error(run_clean(project));
"Removed dealer build state for {}",
project.root_dir.display()
pub(crate) fn run_clean(project: &ProjectRoot) -> DealerResult<()> {
let layout = BuildLayout::for_project(project);
remove_dir_if_exists(&layout.dealer_dir)
.map_err(|error| DealerError::io(&layout.dealer_dir, error))?;
remove_dir_if_exists(&layout.product_dir)
.map_err(|error| DealerError::io(&layout.product_dir, error))?;
fn remove_dir_if_exists(path: &Path) -> io::Result<()> {
fs::remove_dir_all(path)?;
fn exit_on_error(result: DealerResult<()>) {
if let Err(error) = result {
eprintln!("dealer: {error}");