use jacquard_common::DefaultStr; use jacquard_common::types::did::Did; use jacquard_common::types::nsid::Nsid; use jacquard_common::types::recordkey::Rkey; use jacquard_common::types::string::Cid; use jacquard_common::types::tid::Tid; use serde::Deserialize; use serde_json::value::RawValue; #[derive(Debug, Deserialize)] pub struct HydrantFrame { pub id: u64, #[serde(rename = "type")] pub kind: FrameKind, #[serde(default)] pub record: Option, } #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum FrameKind { Record, Identity, Account, Other, } impl<'de> Deserialize<'de> for FrameKind { fn deserialize(d: D) -> Result where D: serde::Deserializer<'de>, { let s = >::deserialize(d)?; Ok(match s.as_ref() { "record" => Self::Record, "identity" => Self::Identity, "account" => Self::Account, _ => Self::Other, }) } } #[derive(Clone, Debug, Deserialize)] pub struct HydrantStreamErrorFrame { pub error: String, #[serde(default)] pub message: Option, } #[derive(Debug, Deserialize)] pub struct RecordFrame { pub live: bool, pub did: Did, pub rev: Tid, pub collection: Nsid, pub rkey: Rkey, pub action: RecordAction, #[serde(default)] pub record: Option>, #[serde(default)] pub cid: Option>, } #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum RecordAction { Create, Update, Delete, Other, } impl<'de> Deserialize<'de> for RecordAction { fn deserialize(d: D) -> Result where D: serde::Deserializer<'de>, { let s = >::deserialize(d)?; Ok(match s.as_ref() { "create" => Self::Create, "update" => Self::Update, "delete" => Self::Delete, _ => Self::Other, }) } }