field_ios

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

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 }