use serde::Serialize;
use serde::de::DeserializeOwned;
use trust_tasks_rs::specs::vta::pcs;
use super::VtaClient;
use crate::error::VtaError;
use crate::trust_tasks;
const PCS_TT_TIMEOUT: u64 = 30;
const PCS_PROOF_TIMEOUT: u64 = 90;
impl VtaClient {
async fn pcs_call<P: Serialize, R: DeserializeOwned>(
&self,
uri: &str,
payload: &P,
timeout: u64,
) -> Result<R, VtaError> {
let payload = serde_json::to_value(payload)
.map_err(|e| VtaError::Validation(format!("{uri} request: {e}")))?;
let answer = self.dispatch_trust_task(uri, payload, timeout).await?;
serde_json::from_value(answer).map_err(|e| {
VtaError::Protocol(format!("{uri} response does not match its schema: {e}"))
})
}
pub async fn pcs_applications_create(
&self,
req: &pcs::applications::create::v0_1::Payload,
) -> Result<pcs::applications::create::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_APPLICATIONS_CREATE_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
pub async fn pcs_applications_show(
&self,
req: &pcs::applications::show::v0_1::Payload,
) -> Result<pcs::applications::show::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_APPLICATIONS_SHOW_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
pub async fn pcs_applications_delete(
&self,
req: &pcs::applications::delete::v0_1::Payload,
) -> Result<pcs::applications::delete::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_APPLICATIONS_DELETE_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
pub async fn pcs_verify_attestation(
&self,
req: &pcs::verify_attestation::v0_1::Payload,
) -> Result<pcs::verify_attestation::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_VERIFY_ATTESTATION_0_1,
req,
PCS_PROOF_TIMEOUT,
)
.await
}
pub async fn pcs_prove(
&self,
req: &pcs::prove::v0_1::Payload,
) -> Result<pcs::prove::v0_1::Response, VtaError> {
self.pcs_call(trust_tasks::TASK_VTA_PCS_PROVE_0_1, req, PCS_PROOF_TIMEOUT)
.await
}
pub async fn pcs_root_request(
&self,
req: &pcs::root_request::v0_1::Payload,
) -> Result<pcs::root_request::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_ROOT_REQUEST_0_1,
req,
PCS_PROOF_TIMEOUT,
)
.await
}
pub async fn pcs_root_accept(
&self,
req: &pcs::root_accept::v0_1::Payload,
) -> Result<pcs::root_accept::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_ROOT_ACCEPT_0_1,
req,
PCS_PROOF_TIMEOUT,
)
.await
}
pub async fn pcs_tokens_request(
&self,
req: &pcs::tokens::request::v0_1::Payload,
) -> Result<pcs::tokens::request::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_TOKENS_REQUEST_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
pub async fn pcs_tokens_accept(
&self,
req: &pcs::tokens::accept::v0_1::Payload,
) -> Result<pcs::tokens::accept::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_TOKENS_ACCEPT_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
pub async fn pcs_tokens_abandon(
&self,
req: &pcs::tokens::abandon::v0_1::Payload,
) -> Result<pcs::tokens::abandon::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_TOKENS_ABANDON_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
pub async fn pcs_attest(
&self,
req: &pcs::attest::v0_1::Payload,
) -> Result<pcs::attest::v0_1::Response, VtaError> {
self.pcs_call(trust_tasks::TASK_VTA_PCS_ATTEST_0_1, req, PCS_PROOF_TIMEOUT)
.await
}
pub async fn pcs_vetter_show(
&self,
req: &pcs::vetter::show::v0_1::Payload,
) -> Result<pcs::vetter::show::v0_1::Response, VtaError> {
self.pcs_call(
trust_tasks::TASK_VTA_PCS_VETTER_SHOW_0_1,
req,
PCS_TT_TIMEOUT,
)
.await
}
}