mwck 0.1.0

mempool.space wallet connector kit
Documentation
use std::time::Duration;

use futures_util::stream::{SplitSink, SplitStream};
use futures_util::StreamExt;
use tokio::net::TcpStream;
use tokio_tungstenite::tungstenite::Error as WsError;
use tokio_tungstenite::{MaybeTlsStream, WebSocketStream};

pub type Sink = SplitSink<WebSocketStream<MaybeTlsStream<TcpStream>>, Message>;
pub type Stream = SplitStream<WebSocketStream<MaybeTlsStream<TcpStream>>>;
pub use tokio_tungstenite::tungstenite::{Message, Error as StreamError};

#[derive(Debug)]
pub enum Error {
    Timeout,
    Ws(WsError),
}

pub async fn connect(url: &str, timeout: Option<Duration>) -> Result<(Sink, Stream), Error> {
    let timeout = timeout.unwrap_or(Duration::from_millis(60_000));
    let timeout_result = tokio::time::timeout(timeout, tokio_tungstenite::connect_async(url)).await;

    match timeout_result {
        Ok(Ok((stream, _))) => Ok(stream.split()),
        Ok(Err(e)) => Err(Error::Ws(e)),
        Err(_) => Err(Error::Timeout),
    }
}