wasi_net/ws/
socket_builder.rs1#![allow(dead_code)]
2use std::io::Write;
3
4use super::*;
5use crate::backend::utils::*;
6use crate::backend::*;
7
8pub struct SocketBuilder {
9 pub(crate) url: url::Url,
10}
11
12impl SocketBuilder {
13 pub fn new(url: url::Url) -> SocketBuilder {
14 SocketBuilder { url }
15 }
16
17 pub fn open(self) -> Result<WebSocket, std::io::Error> {
18 let url = self.url.to_string();
19
20 let submit = Command::WebSocketVersion1 { url };
21 let mut submit = submit.serialize()?;
22 submit += "\n";
23
24 let mut file = std::fs::File::open("/dev/web")?;
25
26 let _ = file.write_all(submit.as_bytes());
27
28 let res = read_response(&mut file)?;
29 match res {
30 Response::Error { msg } => {
31 return Err(std::io::Error::new(std::io::ErrorKind::Other, msg.as_str()));
32 }
33 Response::WebSocketVersion1 { .. } => {}
34 Response::WebRequestVersion1 { .. } => {
35 return Err(std::io::Error::new(
36 std::io::ErrorKind::Other,
37 "server returned a web response instead of a web socket",
38 ));
39 }
40 _ => {
41 return Err(std::io::Error::new(
42 std::io::ErrorKind::Other,
43 "the socket does not support this response type",
44 ));
45 }
46 };
47
48 Ok(WebSocket { file })
49 }
50}