draft_status.rs (2365B)
1 //! Current draft facts and Rust-owned coordinate admission projection. 2 3 use crate::{ 4 FfiAddCommandType, FfiDraftFormRecord, FfiDraftKind, FfiDraftMediaRecord, 5 FfiOperationSettlementRecord, FfiOutboxState, MOBILE_FFI_SCHEMA_VERSION, 6 }; 7 use tera_core::runtime::product_surface::Phase1DraftStatus; 8 9 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Record)] 10 pub struct FfiDraftStatusRecord { 11 pub coordinate_writable: bool, 12 pub coordinate_captured: bool, 13 pub schema_version: u16, 14 pub draft_id: String, 15 pub revision: u64, 16 pub author_public_key: String, 17 pub kind: FfiDraftKind, 18 pub command_type: FfiAddCommandType, 19 pub form: Option<FfiDraftFormRecord>, 20 pub state: FfiOutboxState, 21 pub card_id: String, 22 pub operation_id: Option<String>, 23 pub created_at_unix_ms: u64, 24 pub updated_at_unix_ms: u64, 25 pub media: Vec<FfiDraftMediaRecord>, 26 pub settlement: Option<FfiOperationSettlementRecord>, 27 pub is_revision: bool, 28 pub revision_parent_draft_id: Option<String>, 29 } 30 31 #[cfg_attr(coverage_nightly, coverage(off))] 32 impl From<Phase1DraftStatus> for FfiDraftStatusRecord { 33 fn from(value: Phase1DraftStatus) -> Self { 34 let draft = value.draft(); 35 let settlement = value.push().map(|push| push.settlement()); 36 Self { 37 coordinate_writable: value.coordinate_writable(), 38 coordinate_captured: value.coordinate_captured(), 39 schema_version: MOBILE_FFI_SCHEMA_VERSION, 40 draft_id: hex::encode(draft.draft_id().as_bytes()), 41 revision: draft.revision().get(), 42 author_public_key: hex::encode(draft.author()), 43 kind: value.kind().into(), 44 command_type: value.command_type().into(), 45 form: value.form().map(Into::into), 46 state: value.state().into(), 47 card_id: value.card_id().to_hex(), 48 operation_id: draft.operation_id().map(|id| hex::encode(id.as_bytes())), 49 created_at_unix_ms: draft.created_at_unix_ms(), 50 updated_at_unix_ms: draft.updated_at_unix_ms(), 51 media: value.media().iter().map(Into::into).collect(), 52 settlement: settlement.map(Into::into), 53 is_revision: value.revision_policy().is_some(), 54 revision_parent_draft_id: value.revision_parent_draft_id().map(hex::encode), 55 } 56 } 57 }