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}