1use kittycad_modeling_cmds::websocket::WebSocketRequest;
8use kittycad_modeling_cmds::websocket::WebSocketResponse;
9
10pub fn deserialize_response_json(message: &str) -> Result<WebSocketResponse, serde_json::Error> {
12 serde_json::from_str(message)
13}
14
15pub fn deserialize_response_msgpack(message: &[u8]) -> Result<WebSocketResponse, rmp_serde::decode::Error> {
17 rmp_serde::from_slice(message)
18}
19
20pub fn serialize_request_json(request: &WebSocketRequest) -> Result<String, serde_json::Error> {
22 serde_json::to_string(request)
23}
24
25pub fn serialize_request_msgpack(request: &WebSocketRequest) -> Result<Vec<u8>, rmp_serde::encode::Error> {
27 rmp_serde::to_vec_named(request)
28}
29
30#[cfg(test)]
31mod tests {
32 use kittycad_modeling_cmds::websocket::OkWebSocketResponseData;
33
34 use super::*;
35
36 #[test]
37 fn request_serializers_accept_ping() {
38 let request = WebSocketRequest::Ping {};
39
40 assert_eq!(serialize_request_json(&request).unwrap(), r#"{"type":"ping"}"#);
41 assert!(!serialize_request_msgpack(&request).unwrap().is_empty());
42 }
43
44 #[test]
45 fn response_deserializers_round_trip_pong() {
46 let response = WebSocketResponse::success(None, OkWebSocketResponseData::Pong {});
47 let json = serde_json::to_string(&response).unwrap();
48 let msgpack = rmp_serde::to_vec_named(&response).unwrap();
49
50 assert_eq!(deserialize_response_json(&json).unwrap(), response);
51 assert_eq!(deserialize_response_msgpack(&msgpack).unwrap(), response);
52 }
53}