field_ios

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

targets.rs (2562B)


      1 //! Bounded projection of the original destinations, never transport authority.
      2 
      3 use tera_core::runtime::product_surface::{PublicationTargetDetails, PublicationTargetPolicy};
      4 
      5 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Enum)]
      6 pub enum FfiPublicationTargetPolicy {
      7     Any,
      8     All,
      9     Quorum { threshold: u16 },
     10     Required { fingerprints: Vec<String> },
     11 }
     12 
     13 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Record)]
     14 pub struct FfiPublicationTargetEvidence {
     15     pub fingerprint: String,
     16     pub endpoint: String,
     17     pub attempted: bool,
     18     pub accepted: bool,
     19     pub delivered: bool,
     20     pub rejected: bool,
     21     pub uncertain: bool,
     22     pub read_back_observed_at_unix_ms: Option<u64>,
     23 }
     24 
     25 #[derive(Clone, Debug, Eq, PartialEq, uniffi::Record)]
     26 pub struct FfiPublicationTargetDetails {
     27     pub requires_delivery: bool,
     28     pub policy: FfiPublicationTargetPolicy,
     29     pub targets: Vec<FfiPublicationTargetEvidence>,
     30     pub read_back_available: bool,
     31     pub read_back_complete: bool,
     32 }
     33 
     34 impl From<&PublicationTargetDetails> for FfiPublicationTargetDetails {
     35     fn from(value: &PublicationTargetDetails) -> Self {
     36         Self {
     37             requires_delivery: value.requires_delivery,
     38             policy: match &value.policy {
     39                 PublicationTargetPolicy::Any => FfiPublicationTargetPolicy::Any,
     40                 PublicationTargetPolicy::All => FfiPublicationTargetPolicy::All,
     41                 PublicationTargetPolicy::Quorum(threshold) => FfiPublicationTargetPolicy::Quorum {
     42                     threshold: *threshold,
     43                 },
     44                 PublicationTargetPolicy::Required(fingerprints) => {
     45                     FfiPublicationTargetPolicy::Required {
     46                         fingerprints: fingerprints.clone(),
     47                     }
     48                 }
     49             },
     50             targets: value
     51                 .targets
     52                 .iter()
     53                 .map(|target| FfiPublicationTargetEvidence {
     54                     fingerprint: target.fingerprint.clone(),
     55                     endpoint: target.endpoint.clone(),
     56                     attempted: target.attempted,
     57                     accepted: target.accepted,
     58                     delivered: target.delivered,
     59                     rejected: target.rejected,
     60                     uncertain: target.uncertain,
     61                     read_back_observed_at_unix_ms: target.read_back_observed_at_unix_ms,
     62                 })
     63                 .collect(),
     64             read_back_available: value.read_back_available,
     65             read_back_complete: value.read_back_complete,
     66         }
     67     }
     68 }