#[cfg(feature = "client")]
use serde::Deserialize;
use serde::Serialize;
use crate::{events::Event, responses::Response, reverse_requests::ReverseRequest};
#[cfg_attr(feature = "client", derive(Deserialize))]
#[derive(Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct BaseMessage {
pub seq: i64,
#[serde(flatten)]
pub message: Sendable,
}
#[cfg_attr(feature = "client", derive(Deserialize))]
#[derive(Serialize, Debug)]
#[serde(rename_all = "camelCase")]
#[serde(tag = "type")]
pub enum Sendable {
Response(Response),
Event(Event),
ReverseRequest(ReverseRequest),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_message_serialize() {
let message = BaseMessage {
seq: 10,
message: Sendable::Event(Event::Initialized),
};
let json = serde_json::to_string(&message).unwrap();
let expected = "{\"seq\":10,\"type\":\"event\",\"event\":\"initialized\"}";
assert_eq!(json, expected);
}
}