wamp_client/sync/
request.rs

1use std::str::FromStr;
2use wamp_core::tungstenite;
3use wamp_core::http::{Uri, Version, self};
4use wamp_core::tungstenite::{client::IntoClientRequest, handshake::client::generate_key};
5
6pub struct WampRequest<U: ToString, P: ToString> {
7    pub uri: U,
8    pub protocol: P
9}
10
11impl<U: ToString, P: ToString> IntoClientRequest for WampRequest<U, P> {
12    fn into_client_request(self) -> tungstenite::Result<tungstenite::handshake::client::Request> {
13        let uri = Uri::from_str(&self.uri.to_string())?;
14        let req = http::Request::builder()
15            .uri(self.uri.to_string())
16            .version(Version::HTTP_11)
17            .header("Sec-WebSocket-Protocol", self.protocol.to_string())
18            .header("Sec-WebSocket-Key", generate_key())
19            .header("Connection", "Upgrade")
20            .header("Upgrade", "websocket")
21            .header("Sec-WebSocket-Version", 13)
22            .header("Host", uri.host().unwrap());
23        Ok(tungstenite::handshake::client::Request::from(req.body(())?))
24    }
25}