lighthouse_protocol/
server_message.rs1use serde::{Serialize, Deserialize};
2use crate::{Value, ValueError};
3
4#[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}