diff --git a/src/lib.rs b/src/lib.rs index a6322c8..2ac4528 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,7 +34,7 @@ use tokio_io::{AsyncRead, AsyncWrite}; use tungstenite::handshake::client::{ClientHandshake, Response, Request}; use tungstenite::handshake::server::{ServerHandshake, Callback, NoCallback}; use tungstenite::handshake::{HandshakeRole, HandshakeError}; -use tungstenite::protocol::{WebSocket, Message}; +use tungstenite::protocol::{WebSocket, Message, Role}; use tungstenite::error::Error as WsError; use tungstenite::server; @@ -113,6 +113,22 @@ pub struct WebSocketStream { inner: WebSocket, } +impl WebSocketStream { + /// Convert a raw socket into a WebSocketStream without performing a + /// handshake. + pub fn from_raw_socket(stream: S, role: Role) -> Self { + let ws = WebSocket::from_raw_socket(stream, role); + WebSocketStream { inner: ws } + } + + /// Convert a raw socket into a WebSocketStream without performing a + /// handshake. + pub fn from_partially_read(stream: S, part: Vec, role: Role) -> Self { + let ws = WebSocket::from_partially_read(stream, part, role); + WebSocketStream { inner: ws } + } +} + impl Stream for WebSocketStream where T: AsyncRead + AsyncWrite { type Item = Message; type Error = WsError;