Skip to content

Commit 7866f5e

Browse files
authored
Rewrite WebSockets code (#4)
* redo websockets * docs + tests * remove gloo-console * fix CI * Add getters for the underlying WebSocket fields * better API * better API part 2 electric boogaloo
1 parent 75cab89 commit 7866f5e

File tree

8 files changed

+412
-191
lines changed

8 files changed

+412
-191
lines changed

.idea/reqwasm.iml

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ anyhow = "1.0"
2323
thiserror = "1.0"
2424
futures = "0.3.14"
2525

26+
async-broadcast = "0.3"
27+
pin-project = "1"
28+
2629
[dependencies.web-sys]
2730
version = "0.3.4"
2831
features = [
@@ -42,6 +45,7 @@ features = [
4245
'Blob',
4346
'FormData',
4447
'FileReader',
48+
'CloseEvent',
4549

4650
'WebSocket',
4751
'ErrorEvent',

src/error.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::fmt;
22
use thiserror::Error as ThisError;
33
use wasm_bindgen::{JsCast, JsValue};
44

5-
#[derive(Debug)]
5+
#[derive(Debug, Clone)]
66
#[doc(hidden)]
77
pub struct JsError {
88
pub name: String,
@@ -35,12 +35,16 @@ pub enum Error {
3535
}
3636

3737
pub(crate) fn js_to_error(js_value: JsValue) -> Error {
38+
Error::JsError(js_to_js_error(js_value))
39+
}
40+
41+
pub(crate) fn js_to_js_error(js_value: JsValue) -> JsError {
3842
match js_value.dyn_into::<js_sys::Error>() {
39-
Ok(error) => Error::JsError(JsError {
43+
Ok(error) => JsError {
4044
name: String::from(error.name()),
4145
message: String::from(error.message()),
4246
js_to_string: String::from(error.to_string()),
43-
}),
47+
},
4448
Err(_) => unreachable!("JsValue passed is not an Error type -- this is a bug"),
4549
}
4650
}

src/websocket.rs

-162
This file was deleted.

src/websocket/events.rs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//! WebSocket Events
2+
3+
/// This is created from [`ErrorEvent`][web_sys::ErrorEvent] received from `onerror` listener of the WebSocket.
4+
#[derive(Clone, Debug)]
5+
pub struct ErrorEvent {
6+
/// The error message.
7+
pub message: String,
8+
}
9+
10+
/// Data emiited by `onclose` event
11+
#[derive(Clone, Debug)]
12+
pub struct CloseEvent {
13+
/// Close code
14+
pub code: u16,
15+
/// Close reason
16+
pub reason: String,
17+
/// If the websockt was closed cleanly
18+
pub was_clean: bool,
19+
}

0 commit comments

Comments
 (0)