1#[cfg(feature = "client")]
2use serde::Deserialize;
3use serde::Serialize;
4
5use crate::{events::Event, responses::Response, reverse_requests::ReverseRequest};
6
7#[cfg_attr(feature = "client", derive(Deserialize))]
11#[derive(Serialize, Debug)]
12#[serde(rename_all = "camelCase")]
13pub struct BaseMessage {
14 pub seq: i64,
17 #[serde(flatten)]
18 pub message: Sendable,
19}
20
21#[cfg_attr(feature = "client", derive(Deserialize))]
22#[derive(Serialize, Debug)]
23#[serde(rename_all = "camelCase")]
24#[serde(tag = "type")]
25pub enum Sendable {
26 Response(Response),
27 Event(Event),
28 ReverseRequest(ReverseRequest),
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn test_message_serialize() {
37 let message = BaseMessage {
38 seq: 10,
39 message: Sendable::Event(Event::Initialized),
40 };
41 let json = serde_json::to_string(&message).unwrap();
42
43 let expected = "{\"seq\":10,\"type\":\"event\",\"event\":\"initialized\"}";
44 assert_eq!(json, expected);
45 }
46}