libsignal_service/websocket/
request.rs

1use reqwest::Method;
2use serde::Serialize;
3
4use crate::proto::WebSocketRequestMessage;
5
6#[derive(Debug)]
7pub struct WebSocketRequestMessageBuilder {
8    request: WebSocketRequestMessage,
9}
10
11impl WebSocketRequestMessage {
12    #[allow(clippy::new_ret_no_self)]
13    pub fn new(method: Method) -> WebSocketRequestMessageBuilder {
14        WebSocketRequestMessageBuilder {
15            request: WebSocketRequestMessage {
16                verb: Some(method.to_string()),
17                ..Default::default()
18            },
19        }
20    }
21}
22
23impl WebSocketRequestMessageBuilder {
24    pub fn id(mut self, id: u64) -> Self {
25        self.request.id = Some(id);
26        self
27    }
28
29    pub fn path(mut self, path: impl Into<String>) -> Self {
30        self.request.path = Some(path.into());
31        self
32    }
33
34    pub fn header(mut self, key: &str, value: impl AsRef<str>) -> Self {
35        self.request
36            .headers
37            .push(format!("{key}:{}", value.as_ref()));
38        self
39    }
40
41    pub fn json<S: Serialize>(
42        mut self,
43        value: S,
44    ) -> Result<WebSocketRequestMessage, serde_json::Error> {
45        self.request.body = Some(serde_json::to_vec(&value)?);
46        Ok(self.header("content-type", "application/json").request)
47    }
48
49    pub fn build(self) -> WebSocketRequestMessage {
50        self.request
51    }
52}