lighthouse_protocol/
client_message.rs1use std::collections::HashMap;
2
3use serde::{Serialize, Deserialize};
4
5use crate::{Authentication, Value, ValueError, Verb};
6
7#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
9pub struct ClientMessage<P> {
10 #[serde(rename = "REID")]
11 pub request_id: i32,
12 #[serde(rename = "VERB")]
13 pub verb: Verb,
14 #[serde(rename = "PATH")]
15 pub path: Vec<String>,
16 #[serde(rename = "META")]
17 pub meta: HashMap<String, String>,
18 #[serde(rename = "AUTH")]
19 pub authentication: Authentication,
20 #[serde(rename = "PAYL")]
21 pub payload: P,
22}
23
24impl ClientMessage<Value> {
25 pub fn decode_payload<R>(self) -> Result<ClientMessage<R>, ValueError>
26 where
27 R: for<'de> Deserialize<'de> {
28 Ok(ClientMessage {
29 request_id: self.request_id,
30 verb: self.verb,
31 path: self.path,
32 meta: self.meta,
33 authentication: self.authentication,
34 payload: rmpv::ext::from_value(self.payload)?,
35 })
36 }
37}