tab_websocket/resource/
connection.rs

1use crate::WebsocketConnection;
2use futures::executor::block_on;
3use lifeline::impl_storage_take;
4use log::error;
5
6/// A resource which wraps an established TCP websocket connection
7#[derive(Debug)]
8pub struct WebsocketResource(pub WebsocketConnection);
9
10impl Drop for WebsocketResource {
11    fn drop(&mut self) {
12        match block_on(self.0.close(None)) {
13            Ok(_) => {}
14            Err(err) => match err {
15                tungstenite::Error::ConnectionClosed => {}
16                tungstenite::Error::AlreadyClosed => {}
17                tungstenite::Error::Protocol(_) => {}
18                tungstenite::Error::Io(_) => {}
19                _ => error!("failed to close websocket: {}", err),
20            },
21        }
22    }
23}
24
25impl_storage_take!(WebsocketResource);