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;
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}
18
19#[derive(Clone, Copy, Debug, Eq, PartialEq)]
20pub enum FrameKind {
21 Record,
22 Identity,
23 Account,
24 Other,
25}
26
27impl<'de> Deserialize<'de> for FrameKind {
28 fn deserialize<D>(d: D) -> Result<Self, D::Error>
29 where
30 D: serde::Deserializer<'de>,
31 {
32 let s = <std::borrow::Cow<'de, str>>::deserialize(d)?;
33 Ok(match s.as_ref() {
34 "record" => Self::Record,
35 "identity" => Self::Identity,
36 "account" => Self::Account,
37 _ => Self::Other,
38 })
39 }
40}
41
42#[derive(Clone, Debug, Deserialize)]
43pub struct HydrantStreamErrorFrame {
44 pub error: String,
45 #[serde(default)]
46 pub message: Option<String>,
47}
48
49#[derive(Debug, Deserialize)]
50pub struct RecordFrame {
51 pub live: bool,
52 pub did: Did<DefaultStr>,
53 pub rev: Tid,
54 pub collection: Nsid<DefaultStr>,
55 pub rkey: Rkey<DefaultStr>,
56 pub action: RecordAction,
57 #[serde(default)]
58 pub record: Option<Box<RawValue>>,
59 #[serde(default)]
60 pub cid: Option<Cid<DefaultStr>>,
61}
62
63#[derive(Clone, Copy, Debug, Eq, PartialEq)]
64pub enum RecordAction {
65 Create,
66 Update,
67 Delete,
68 Other,
69}
70
71impl<'de> Deserialize<'de> for RecordAction {
72 fn deserialize<D>(d: D) -> Result<Self, D::Error>
73 where
74 D: serde::Deserializer<'de>,
75 {
76 let s = <std::borrow::Cow<'de, str>>::deserialize(d)?;
77 Ok(match s.as_ref() {
78 "create" => Self::Create,
79 "update" => Self::Update,
80 "delete" => Self::Delete,
81 _ => Self::Other,
82 })
83 }
84}