field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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 }