field_ios

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

revision.rs (1417B)


      1 use crate::{FfiAddCommandType, FfiDraftFormRecord, TeraAppError, TeraRuntime};
      2 use tera_core::runtime::product_surface::{CardId, Phase1RevisionTarget};
      3 
      4 #[derive(Clone, Debug, uniffi::Record)]
      5 pub struct FfiRevisionSourceRequest {
      6     pub schema_version: u16,
      7     pub source_draft_id: String,
      8     pub command_type: FfiAddCommandType,
      9     pub card_id: String,
     10     pub source_event_id: String,
     11     pub source_address: Option<String>,
     12     pub author_public_key: String,
     13 }
     14 
     15 #[uniffi::export]
     16 impl TeraRuntime {
     17     pub async fn revision_source_form(
     18         &self,
     19         request: FfiRevisionSourceRequest,
     20     ) -> Result<FfiDraftFormRecord, TeraAppError> {
     21         if request.schema_version != crate::MOBILE_FFI_SCHEMA_VERSION {
     22             return Err(TeraAppError::invalid_argument(
     23                 "unsupported_revision_source_schema",
     24             ));
     25         }
     26         let target = Phase1RevisionTarget::from_source(
     27             request.command_type.into(),
     28             CardId::parse(&request.card_id)
     29                 .map_err(|_| TeraAppError::invalid_argument("invalid_card_id"))?,
     30             request.source_event_id,
     31             request.source_address,
     32             request.author_public_key,
     33         )?;
     34         let source = crate::decode_id(&request.source_draft_id, "invalid_revision_source_id")?;
     35         let form = self.inner.revision_source_form(source, &target).await?;
     36         Ok((&form).into())
     37     }
     38 }