use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct DeleteContextResultBody {
pub id: String,
pub deleted: bool,
#[serde(
default,
alias = "daemon_cleanup_errors",
skip_serializing_if = "Vec::is_empty"
)]
pub daemon_cleanup_errors: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct DeleteContextPreviewBody {
pub id: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct DeleteContextPreviewResultBody {
pub id: String,
#[serde(default, alias = "sub_contexts", skip_serializing_if = "Vec::is_empty")]
pub sub_contexts: Vec<String>,
pub keys: Vec<String>,
#[serde(alias = "webvh_dids")]
pub webvh_dids: Vec<String>,
#[serde(alias = "acl_entries_removed")]
pub acl_entries_removed: Vec<String>,
#[serde(alias = "acl_entries_updated")]
pub acl_entries_updated: Vec<String>,
#[serde(default, alias = "did_templates")]
pub did_templates: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HostCleanupFailure {
pub did: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub server: Option<String>,
pub reason: String,
}
impl std::fmt::Display for HostCleanupFailure {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}: {}", self.did, self.reason)
}
}
pub fn host_cleanup_failures(err: &crate::error::VtaError) -> Option<Vec<HostCleanupFailure>> {
use vti_specs::vta::contexts::delete::v1_1::error_codes::HOST_CLEANUP_FAILED;
let crate::error::VtaError::Rejected { code, details, .. } = err else {
return None;
};
if code != HOST_CLEANUP_FAILED.code {
return None;
}
Some(
details
.as_ref()
.and_then(|d| d.get("hostCleanupFailures"))
.and_then(|v| serde_json::from_value(v.clone()).ok())
.unwrap_or_default(),
)
}