Skip to main content

teliox/query/
mod.rs

1use keri_core::{
2    event_message::{msg::KeriEvent, timestamped::Timestamped, EventTypeTag, Typeable},
3    prefix::IdentifierPrefix,
4    query::query_event::SignedQuery,
5};
6use serde::{Deserialize, Serialize};
7
8pub type QueryEvent = KeriEvent<Timestamped<TelQueryRoute>>;
9
10#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
11#[serde(tag = "r")]
12pub enum TelQueryRoute {
13    #[serde(rename = "tels")]
14    Tels {
15        #[serde(rename = "rr")]
16        reply_route: String,
17        #[serde(rename = "q")]
18        args: TelQueryArgs,
19    },
20}
21
22impl Typeable for TelQueryRoute {
23    type TypeTag = EventTypeTag;
24    fn get_type(&self) -> EventTypeTag {
25        EventTypeTag::Qry
26    }
27}
28
29#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
30pub struct TelQueryArgs {
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub i: Option<IdentifierPrefix>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub ri: Option<IdentifierPrefix>,
35}
36
37pub type SignedTelQuery = SignedQuery<TelQueryEvent>;
38pub type TelQueryEvent = KeriEvent<Timestamped<TelQueryRoute>>;
39
40#[test]
41pub fn query() {
42    let qry_raw = r#"{"v":"KERI10JSON0000fe_","t":"qry","d":"EHraBkp-XMf1x_bo70O2x3brBCHlJHa7q_MzsBNeYz2_","dt":"2021-01-01T00:00:00.000000+00:00","r":"tels","rr":"","q":{"i":"EA8Ih8hxLi3mmkyItXK1u55cnHl4WgNZ_RE-gKXqgcX4","ri":"EO0_SyqPS1-EVYSITakYpUHaUZZpZGsjaXFOaO_kCfS4"}}"#;
43    let qry: QueryEvent = serde_json::from_reader(qry_raw.as_bytes()).unwrap();
44
45    let serialized = qry.encode().unwrap();
46    assert_eq!(qry_raw.as_bytes(), serialized);
47}