field_ios

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

page.rs (4044B)


      1 use crate::{
      2     FfiComposerScopeRecord, FfiOutboxState, FfiSubmissionReservationRequest,
      3     MOBILE_FFI_SCHEMA_VERSION,
      4 };
      5 use tera_core::runtime::product_surface::{
      6     Phase1DraftRepairReason, SubmissionListEntry, SubmissionPage, SubmissionSummaryState,
      7 };
      8 
      9 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Enum)]
     10 pub enum FfiSubmissionSummaryState {
     11     Reserved,
     12     Operation {
     13         intent_id: String,
     14         operation_id: String,
     15         revision: u64,
     16         state: FfiOutboxState,
     17     },
     18 }
     19 
     20 #[derive(Clone, Copy, Debug, Eq, PartialEq, uniffi::Enum)]
     21 pub enum FfiSubmissionRepairReason {
     22     UnsupportedSchema,
     23     CorruptRecord,
     24     NeedsAttention,
     25 }
     26 
     27 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Enum)]
     28 pub enum FfiSubmissionListEntry {
     29     Submission {
     30         request: FfiSubmissionReservationRequest,
     31         reservation_id: String,
     32         reserved_at_unix_ms: u64,
     33         state: FfiSubmissionSummaryState,
     34     },
     35     Repair {
     36         reservation_key: String,
     37         revision: u64,
     38         reason: FfiSubmissionRepairReason,
     39     },
     40 }
     41 
     42 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Record)]
     43 pub struct FfiSubmissionPageRecord {
     44     pub schema_version: u16,
     45     pub scope: FfiComposerScopeRecord,
     46     pub entries: Vec<FfiSubmissionListEntry>,
     47     pub next_cursor: Option<String>,
     48 }
     49 
     50 impl From<&SubmissionPage> for FfiSubmissionPageRecord {
     51     fn from(value: &SubmissionPage) -> Self {
     52         Self {
     53             schema_version: MOBILE_FFI_SCHEMA_VERSION,
     54             scope: value.scope().into(),
     55             entries: value
     56                 .entries()
     57                 .iter()
     58                 .map(|entry| match entry {
     59                     SubmissionListEntry::Submission(summary) => {
     60                         FfiSubmissionListEntry::Submission {
     61                             request: summary.request().into(),
     62                             reservation_id: hex::encode(summary.reservation_id().as_bytes()),
     63                             reserved_at_unix_ms: summary.reserved_at_unix_ms(),
     64                             state: match summary.state() {
     65                                 SubmissionSummaryState::Reserved => {
     66                                     FfiSubmissionSummaryState::Reserved
     67                                 }
     68                                 SubmissionSummaryState::Operation {
     69                                     intent_id,
     70                                     operation_id,
     71                                     revision,
     72                                     state,
     73                                 } => FfiSubmissionSummaryState::Operation {
     74                                     intent_id: hex::encode(intent_id.as_bytes()),
     75                                     operation_id: hex::encode(operation_id.as_bytes()),
     76                                     revision,
     77                                     state: state.into(),
     78                                 },
     79                             },
     80                         }
     81                     }
     82                     SubmissionListEntry::Repair {
     83                         reservation_key,
     84                         revision,
     85                         reason,
     86                     } => FfiSubmissionListEntry::Repair {
     87                         reservation_key: hex::encode(reservation_key),
     88                         revision: *revision,
     89                         reason: match reason {
     90                             Phase1DraftRepairReason::UnsupportedSchema => {
     91                                 FfiSubmissionRepairReason::UnsupportedSchema
     92                             }
     93                             Phase1DraftRepairReason::CorruptRecord => {
     94                                 FfiSubmissionRepairReason::CorruptRecord
     95                             }
     96                             Phase1DraftRepairReason::NeedsAttention => {
     97                                 FfiSubmissionRepairReason::NeedsAttention
     98                             }
     99                         },
    100                     },
    101                 })
    102                 .collect(),
    103             next_cursor: value.next_cursor().map(str::to_owned),
    104         }
    105     }
    106 }