sierradb_server/request/
eget.rs1use combine::Parser;
2use redis_protocol::resp3::types::BytesFrame;
3use sierradb::bucket::segment::EventRecord;
4use sierradb_cluster::read::ReadEvent;
5use uuid::Uuid;
6
7use crate::error::MapRedisError;
8use crate::parser::{FrameStream, event_id};
9use crate::request::{HandleRequest, encode_event};
10use crate::server::Conn;
11
12pub struct EGet {
27 pub event_id: Uuid,
28}
29
30impl EGet {
31 pub fn parser<'a>() -> impl Parser<FrameStream<'a>, Output = EGet> + 'a {
32 event_id().map(|event_id| EGet { event_id })
33 }
34}
35
36impl HandleRequest for EGet {
37 type Error = String;
38 type Ok = EGetResp;
39
40 async fn handle_request(self, conn: &mut Conn) -> Result<Option<Self::Ok>, Self::Error> {
41 match conn
42 .cluster_ref
43 .ask(ReadEvent::new(self.event_id))
44 .await
45 .map_redis_err()?
46 {
47 Some(record) => Ok(Some(EGetResp::Exists(record))),
48 None => Ok(Some(EGetResp::NotFound)),
49 }
50 }
51}
52
53pub enum EGetResp {
54 Exists(EventRecord),
55 NotFound,
56}
57
58impl From<EGetResp> for BytesFrame {
59 fn from(resp: EGetResp) -> Self {
60 match resp {
61 EGetResp::Exists(record) => encode_event(record),
62 EGetResp::NotFound => BytesFrame::Null,
63 }
64 }
65}