use super::helpers::TrustTaskOutcome;
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};
pub(super) async fn handle_initiate_export(
state: &AppState,
auth: &AuthClaims,
doc: TrustTask<Value>,
) -> TrustTaskOutcome {
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>,
) -> TrustTaskOutcome {
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>,
) -> TrustTaskOutcome {
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>,
) -> TrustTaskOutcome {
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>,
) -> TrustTaskOutcome {
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),
}
}