use crate::delete;
use crate::ui_state::UiState;
use super::super::answer;
use super::super::reply::Reply;
use super::Deps;
pub(super) fn unmake(
deps: &Deps,
ui: &mut UiState,
ts: &str,
workspace: &std::path::Path,
typed: &str,
) -> Result<Reply, String> {
let confirm = answer::confirmation_of(&deps.snapshot, workspace)
.ok_or_else(|| delete::DeleteError::Unnamed.to_string())?;
if confirm.refused() {
return Err(delete::DeleteError::Live(confirm.live.clone()).to_string());
}
if !confirm.armed(typed) {
return Err(delete::DeleteError::NotArmed.to_string());
}
delete::execute(
&delete::plan(
&confirm,
workspace,
&crate::world::layout_under(&deps.yog_data_root).root,
&deps.snapshot.projects,
),
&deps.bl,
ui,
&deps.state_root,
ts,
)
.map(|()| Reply::Deleted)
.map_err(|e| e.to_string())
}
pub(super) fn delete_agent(
deps: &Deps,
ui: &mut UiState,
ts: &str,
workspace: &std::path::Path,
agent: &str,
typed: &str,
) -> Result<Reply, String> {
let confirm = answer::agent_confirmation_of(&deps.snapshot, workspace, agent)
.ok_or_else(|| delete::DeleteError::Unnamed.to_string())?;
if confirm.refused() {
return Err(delete::agent::live_refusal(&confirm.live));
}
let children = confirm.subtree_armed(typed);
let outcome = delete::agent::spawn(
&deps.litany,
&deps.state_root,
ts,
workspace,
agent,
children,
)
.map_err(|e| e.to_string())?;
if outcome.ok() {
ui.prune_agent(&crate::nav::ws_key(workspace), agent);
}
Ok(Reply::Outcome(outcome))
}