Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ struct TxChannelPayload {
}

#[derive(Debug)]
pub struct Socketeer<RxMessage: for<'a> Deserialize<'a> + Debug, TxMessage: Serialize + Debug> {
pub struct Socketeer<
RxMessage: for<'a> Deserialize<'a> + Debug,
TxMessage: Serialize + Debug,
const CHANNEL_SIZE: usize = 4,
> {
url: Url,
receiever: mpsc::Receiver<Message>,
sender: mpsc::Sender<TxChannelPayload>,
Expand All @@ -42,16 +46,21 @@ pub struct Socketeer<RxMessage: for<'a> Deserialize<'a> + Debug, TxMessage: Seri
_tx_message: std::marker::PhantomData<TxMessage>,
}

impl<RxMessage: for<'a> Deserialize<'a> + Debug, TxMessage: Serialize + Debug>
Socketeer<RxMessage, TxMessage>
impl<
RxMessage: for<'a> Deserialize<'a> + Debug,
TxMessage: Serialize + Debug,
const CHANNEL_SIZE: usize,
> Socketeer<RxMessage, TxMessage, CHANNEL_SIZE>
{
/// Create a `Socketeer` connected to the provided URL.
/// Once connected, Socketeer manages the underlying WebSocket connection, transparently handling protocol messages.
/// # Errors
/// - If the URL cannot be parsed
/// - If the WebSocket connection to the requested URL fails
#[cfg_attr(feature = "tracing", instrument)]
pub async fn connect(url: &str) -> Result<Socketeer<RxMessage, TxMessage>, Error> {
pub async fn connect(
url: &str,
) -> Result<Socketeer<RxMessage, TxMessage, CHANNEL_SIZE>, Error> {
let url = Url::parse(url).map_err(|source| Error::UrlParse {
url: url.to_string(),
source,
Expand All @@ -60,8 +69,9 @@ impl<RxMessage: for<'a> Deserialize<'a> + Debug, TxMessage: Serialize + Debug>
let (socket, response) = connect_async(url.as_str()).await?;
#[cfg(feature = "tracing")]
info!("Connection Successful, connection info: \n{:#?}", response);
let (tx_tx, tx_rx) = mpsc::channel::<TxChannelPayload>(8);
let (rx_tx, rx_rx) = mpsc::channel::<Message>(8);

let (tx_tx, tx_rx) = mpsc::channel::<TxChannelPayload>(CHANNEL_SIZE);
let (rx_tx, rx_rx) = mpsc::channel::<Message>(CHANNEL_SIZE);

let socket_handle = tokio::spawn(async move { socket_loop(tx_rx, rx_tx, socket).await });
Ok(Socketeer {
Expand Down
Loading