This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / bobbin / crates / ingest / src / frame.rs
2.3 kB 93 lines
1use jacquard_common::DefaultStr; 2use jacquard_common::types::did::Did; 3use jacquard_common::types::nsid::Nsid; 4use jacquard_common::types::recordkey::Rkey; 5use jacquard_common::types::string::{Cid, Handle}; 6use jacquard_common::types::tid::Tid; 7use serde::Deserialize; 8use serde_json::value::RawValue; 9 10#[derive(Debug, Deserialize)] 11pub struct HydrantFrame { 12 pub id: u64, 13 #[serde(rename = "type")] 14 pub kind: FrameKind, 15 #[serde(default)] 16 pub record: Option<RecordFrame>, 17 #[serde(default)] 18 pub identity: Option<IdentityFrame>, 19} 20 21#[derive(Clone, Debug, Deserialize)] 22pub struct IdentityFrame { 23 pub did: Did<DefaultStr>, 24 pub handle: Handle<DefaultStr>, 25 pub is_active: bool, 26} 27 28#[derive(Clone, Copy, Debug, Eq, PartialEq)] 29pub enum FrameKind { 30 Record, 31 Identity, 32 Account, 33 Other, 34} 35 36impl<'de> Deserialize<'de> for FrameKind { 37 fn deserialize<D>(d: D) -> Result<Self, D::Error> 38 where 39 D: serde::Deserializer<'de>, 40 { 41 let s = <std::borrow::Cow<'de, str>>::deserialize(d)?; 42 Ok(match s.as_ref() { 43 "record" => Self::Record, 44 "identity" => Self::Identity, 45 "account" => Self::Account, 46 _ => Self::Other, 47 }) 48 } 49} 50 51#[derive(Clone, Debug, Deserialize)] 52pub struct HydrantStreamErrorFrame { 53 pub error: String, 54 #[serde(default)] 55 pub message: Option<String>, 56} 57 58#[derive(Debug, Deserialize)] 59pub struct RecordFrame { 60 pub live: bool, 61 pub did: Did<DefaultStr>, 62 pub rev: Tid, 63 pub collection: Nsid<DefaultStr>, 64 pub rkey: Rkey<DefaultStr>, 65 pub action: RecordAction, 66 #[serde(default)] 67 pub record: Option<Box<RawValue>>, 68 #[serde(default)] 69 pub cid: Option<Cid<DefaultStr>>, 70} 71 72#[derive(Clone, Copy, Debug, Eq, PartialEq)] 73pub enum RecordAction { 74 Create, 75 Update, 76 Delete, 77 Other, 78} 79 80impl<'de> Deserialize<'de> for RecordAction { 81 fn deserialize<D>(d: D) -> Result<Self, D::Error> 82 where 83 D: serde::Deserializer<'de>, 84 { 85 let s = <std::borrow::Cow<'de, str>>::deserialize(d)?; 86 Ok(match s.as_ref() { 87 "create" => Self::Create, 88 "update" => Self::Update, 89 "delete" => Self::Delete, 90 _ => Self::Other, 91 }) 92 } 93}