This repository has no description
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}