Skip to main content

hanabi_core/protocol/request/
mod.rs

1mod control;
2mod key_value;
3mod pubsub;
4
5pub use control::*;
6pub use key_value::KeyValueRequest;
7pub use pubsub::PubSubRequest;
8
9use crate::protocol::error::ProtocolError;
10use bytes::Bytes;
11use tracing::error;
12
13/// Represents a request sent to the server.
14#[derive(Debug, Clone, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
15pub enum Request {
16    /// KeyValue store requests
17    KeyValue(KeyValueRequest),
18
19    /// PubSub requests
20    PubSub(PubSubRequest),
21
22    /// Control requests
23    Control(ControlRequest),
24}
25
26impl TryFrom<Request> for Vec<u8> {
27    type Error = ProtocolError;
28
29    fn try_from(value: Request) -> Result<Self, Self::Error> {
30        rmp_serde::to_vec(&value)
31            .inspect_err(|error| error!(?error, "Failed to serialize request"))
32            .map_err(|error| ProtocolError::Serialization(error.to_string()))
33    }
34}
35
36impl TryFrom<Request> for Bytes {
37    type Error = ProtocolError;
38
39    fn try_from(value: Request) -> Result<Self, Self::Error> {
40        rmp_serde::to_vec(&value)
41            .inspect_err(|error| error!(?error, "Failed to serialize request"))
42            .map_err(|error| ProtocolError::Serialization(error.to_string()))
43            .map(Bytes::from)
44    }
45}
46
47impl TryFrom<Vec<u8>> for Request {
48    type Error = ProtocolError;
49
50    fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
51        rmp_serde::from_slice(&value)
52            .inspect_err(|error| error!(?error, "Failed to deserialize request"))
53            .map_err(|error| ProtocolError::Serialization(error.to_string()))
54    }
55}
56
57impl TryFrom<&[u8]> for Request {
58    type Error = ProtocolError;
59
60    fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
61        rmp_serde::from_slice(value)
62            .inspect_err(|error| error!(?error, "Failed to deserialize request"))
63            .map_err(|error| ProtocolError::Serialization(error.to_string()))
64    }
65}
66
67impl TryFrom<Bytes> for Request {
68    type Error = ProtocolError;
69
70    fn try_from(value: Bytes) -> Result<Self, Self::Error> {
71        rmp_serde::from_slice(&value)
72            .inspect_err(|error| error!(?error, "Failed to deserialize request"))
73            .map_err(|error| ProtocolError::Serialization(error.to_string()))
74    }
75}