renewal.rs (1726B)
1 use crate::{FfiSubmissionUploadJobRecord, TeraAppError}; 2 use tera_core::runtime::product_surface::{ 3 Phase1NativeUploadJob, SubmissionOperationStatus, SubmissionUploadRenewal, 4 }; 5 6 /// Transient host reconciliation assertion, not reusable persisted authority. 7 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Record)] 8 pub struct FfiSubmissionUploadRenewal { 9 pub prior_revision: u64, 10 pub prior_attempt: String, 11 pub native_failed: bool, 12 } 13 14 impl TryFrom<FfiSubmissionUploadRenewal> for SubmissionUploadRenewal { 15 type Error = TeraAppError; 16 fn try_from(value: FfiSubmissionUploadRenewal) -> Result<Self, Self::Error> { 17 let bytes = crate::decode_id(&value.prior_attempt, "submission_upload_attempt_invalid")?; 18 if hex::encode(bytes) != value.prior_attempt { 19 return Err(TeraAppError::invalid_argument( 20 "submission_upload_attempt_invalid", 21 )); 22 } 23 Ok(Self::new(value.prior_revision, bytes, value.native_failed)?) 24 } 25 } 26 27 impl From<(SubmissionOperationStatus, Phase1NativeUploadJob)> for FfiSubmissionUploadJobRecord { 28 fn from((status, job): (SubmissionOperationStatus, Phase1NativeUploadJob)) -> Self { 29 Self { 30 schema_version: crate::UPLOAD_OUTPUT_FFI_SCHEMA_VERSION, 31 submission: (&status).into(), 32 operation_id: hex::encode(job.operation_id()), 33 remote_url: job.remote_url().to_owned(), 34 upload_url: job.upload_url().to_owned(), 35 authorization_header: job.authorization_header().to_owned(), 36 expected_sha256: job.expected_sha256().to_owned(), 37 media_type: job.media_type().to_owned(), 38 byte_size: job.byte_size(), 39 } 40 } 41 }