1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use crate::WebsocketConnection;
use futures::executor::block_on;
use lifeline::impl_storage_take;
use log::error;

#[derive(Debug)]
pub struct WebsocketResource(pub WebsocketConnection);

impl Drop for WebsocketResource {
    fn drop(&mut self) {
        match block_on(self.0.close(None)) {
            Ok(_) => {}
            Err(err) => match err {
                tungstenite::Error::ConnectionClosed => {}
                tungstenite::Error::AlreadyClosed => {}
                tungstenite::Error::Protocol(_) => {}
                _ => error!("failed to close websocket: {}", err),
            },
        }
    }
}

impl_storage_take!(WebsocketResource);