use axum::response::Response;
use serde_json::Value;
use trust_tasks_rs::TrustTask;
use vta_sdk::protocols::backup_management::descriptors::{
AbortBundleBody, CompleteExportBody, FinalizeImportBody, InitiateExportBody, InitiateImportBody,
};
use crate::auth::AuthClaims;
use crate::operations::backup::descriptors;
use crate::server::AppState;
use super::helpers::{app_error_to_reject, parse_payload, success_response};
#[allow(dead_code)] pub(super) const DISPATCHED_URIS: &[&str] = &[
vta_sdk::trust_tasks::TASK_BACKUP_INITIATE_EXPORT_1_0,
vta_sdk::trust_tasks::TASK_BACKUP_COMPLETE_EXPORT_1_0,
vta_sdk::trust_tasks::TASK_BACKUP_INITIATE_IMPORT_1_0,
vta_sdk::trust_tasks::TASK_BACKUP_FINALIZE_IMPORT_1_0,
vta_sdk::trust_tasks::TASK_BACKUP_ABORT_1_0,
];
pub(super) async fn handle_initiate_export(
state: &AppState,
auth: &AuthClaims,
doc: TrustTask<Value>,
) -> Response {
let req: InitiateExportBody = match parse_payload(&doc) {
Ok(r) => r,
Err(resp) => return resp,
};
let deps = descriptors::DescriptorDeps::from_app_state(state);
match descriptors::initiate_export(&deps, auth, req).await {
Ok(body) => success_response(&doc, body),
Err(e) => app_error_to_reject(&doc, e),
}
}
pub(super) async fn handle_complete_export(
state: &AppState,
auth: &AuthClaims,
doc: TrustTask<Value>,
) -> Response {
let req: CompleteExportBody = match parse_payload(&doc) {
Ok(r) => r,
Err(resp) => return resp,
};
let deps = descriptors::DescriptorDeps::from_app_state(state);
match descriptors::complete_export(&deps, auth, req).await {
Ok(body) => success_response(&doc, body),
Err(e) => app_error_to_reject(&doc, e),
}
}
pub(super) async fn handle_initiate_import(
state: &AppState,
auth: &AuthClaims,
doc: TrustTask<Value>,
) -> Response {
let req: InitiateImportBody = match parse_payload(&doc) {
Ok(r) => r,
Err(resp) => return resp,
};
let deps = descriptors::DescriptorDeps::from_app_state(state);
match descriptors::initiate_import(&deps, auth, req).await {
Ok(body) => success_response(&doc, body),
Err(e) => app_error_to_reject(&doc, e),
}
}
pub(super) async fn handle_finalize_import(
state: &AppState,
auth: &AuthClaims,
doc: TrustTask<Value>,
) -> Response {
let req: FinalizeImportBody = match parse_payload(&doc) {
Ok(r) => r,
Err(resp) => return resp,
};
let deps = descriptors::DescriptorDeps::from_app_state(state);
match descriptors::finalize_import(&deps, auth, req).await {
Ok(body) => success_response(&doc, body),
Err(e) => app_error_to_reject(&doc, e),
}
}
pub(super) async fn handle_abort(
state: &AppState,
auth: &AuthClaims,
doc: TrustTask<Value>,
) -> Response {
let req: AbortBundleBody = match parse_payload(&doc) {
Ok(r) => r,
Err(resp) => return resp,
};
let deps = descriptors::DescriptorDeps::from_app_state(state);
match descriptors::abort_bundle(&deps, auth, req).await {
Ok(body) => success_response(&doc, body),
Err(e) => app_error_to_reject(&doc, e),
}
}