lighthouse_protocol/
server_message.rs

1use serde::{Serialize, Deserialize};
2use crate::{Value, ValueError};
3
4/// A message originating from the lighthouse server.
5#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
6pub struct ServerMessage<P> {
7    #[serde(rename = "RNUM")]
8    pub code: i32,
9    #[serde(rename = "REID")]
10    pub request_id: Option<i32>,
11    #[serde(rename = "WARNINGS", skip_serializing_if = "Vec::is_empty", default)]
12    pub warnings: Vec<String>,
13    #[serde(rename = "RESPONSE")]
14    pub response: Option<String>,
15    #[serde(rename = "PAYL")]
16    pub payload: P,
17}
18
19impl ServerMessage<Value> {
20    pub fn decode_payload<R>(self) -> Result<ServerMessage<R>, ValueError>
21    where
22        R: for<'de> Deserialize<'de> {
23        Ok(ServerMessage {
24            code: self.code,
25            request_id: self.request_id,
26            warnings: self.warnings,
27            response: self.response,
28            payload: rmpv::ext::from_value(self.payload)?,
29        })
30    }
31}