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 }