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 }