field_ios

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

runtime.rs (2376B)


      1 use super::TeraRuntime;
      2 use crate::composer::{id, version};
      3 use crate::{
      4     FfiComposerDraftRecord, FfiComposerPageRecord, FfiComposerSaveReceipt, FfiComposerSaveRequest,
      5     FfiComposerScopeRecord, FfiRuntimeChangeKind, TeraAppError,
      6 };
      7 use tera_core::runtime::product_surface::{ComposerPartialForm, ComposerScope};
      8 
      9 #[cfg_attr(not(coverage_nightly), uniffi::export(async_runtime = "tokio"))]
     10 impl TeraRuntime {
     11     /// Saves bounded editing data without validating publication or creating an operation.
     12     pub async fn composer_save(
     13         &self,
     14         request: FfiComposerSaveRequest,
     15     ) -> Result<FfiComposerSaveReceipt, TeraAppError> {
     16         let (id, expected_revision, sequence) = request.validate_identity()?;
     17         let scope: ComposerScope = request.scope.try_into()?;
     18         let form: ComposerPartialForm = request.form.try_into()?;
     19         let receipt = match expected_revision {
     20             Some(revision) => {
     21                 self.inner
     22                     .composer_save(&scope, id, revision, sequence, form)
     23                     .await
     24             }
     25             None => self.inner.composer_create(&scope, id, sequence, form).await,
     26         }
     27         .map_err(TeraAppError::from)?;
     28         self.subscriptions.notify(
     29             FfiRuntimeChangeKind::Drafts,
     30             Some(hex::encode(id.as_bytes())),
     31         );
     32         Ok((&receipt).into())
     33     }
     34 
     35     pub async fn composer_load(
     36         &self,
     37         scope: FfiComposerScopeRecord,
     38         composer_id: String,
     39     ) -> Result<FfiComposerDraftRecord, TeraAppError> {
     40         let scope = scope.try_into()?;
     41         let draft = self
     42             .inner
     43             .composer_load(&scope, id(&composer_id)?)
     44             .await
     45             .map_err(TeraAppError::from)?;
     46         Ok((&draft).into())
     47     }
     48 
     49     /// Live ID-ordered inventory. Resnapshot from None to discover insertions behind a cursor.
     50     pub async fn composer_list(
     51         &self,
     52         schema_version: u16,
     53         scope: FfiComposerScopeRecord,
     54         limit: u16,
     55         cursor: Option<String>,
     56     ) -> Result<FfiComposerPageRecord, TeraAppError> {
     57         version(schema_version)?;
     58         let scope = scope.try_into()?;
     59         let page = self
     60             .inner
     61             .composer_list(&scope, limit, cursor.as_deref())
     62             .await
     63             .map_err(TeraAppError::from)?;
     64         Ok((&page).into())
     65     }
     66 }