pub(crate) async fn session_delete(
client: &reqwest::Client,
url: &str,
id: String,
force: bool,
) -> anyhow::Result<()> {
let resp = client
.post(format!("{url}/api/v1/sessions/managed/{id}/delete"))
.query(&[("force", force.to_string())])
.send()
.await?;
if resp.status() == reqwest::StatusCode::NOT_FOUND {
println!("not found");
return Ok(());
}
if resp.status() == reqwest::StatusCode::CONFLICT {
let msg = resp.text().await.unwrap_or_default();
eprintln!("error: {msg}");
return Err(anyhow::anyhow!("delete refused: {msg}"));
}
let body: serde_json::Value = resp.error_for_status()?.json().await?;
let id_display = body
.get("id")
.and_then(|v| v.as_str())
.unwrap_or(id.as_str());
let name = body.get("name").and_then(|v| v.as_str()).unwrap_or("?");
let prior_state = body.get("state").and_then(|v| v.as_str()).unwrap_or("?");
println!("deleted {id_display} ({name}) [was {prior_state}] — record removed from store");
Ok(())
}