use crate::bindings::golem::websocket::client::{
Error, Message, WebsocketConnection as RawWebsocketConnection,
};
pub use crate::bindings::golem::websocket::client::{
CloseInfo as WebSocketCloseInfo, Error as WebSocketError, Message as WebSocketMessage,
};
pub struct WebsocketConnection {
inner: RawWebsocketConnection,
}
impl WebsocketConnection {
pub fn connect(url: &str, headers: Option<Vec<(String, String)>>) -> Result<Self, Error> {
RawWebsocketConnection::connect(url, headers.as_deref()).map(|inner| Self { inner })
}
pub fn send(&self, message: &Message) -> Result<(), Error> {
self.inner.send(message)
}
pub fn blocking_receive(&self) -> Result<Message, Error> {
self.inner.receive()
}
pub fn blocking_receive_with_timeout(&self, timeout_ms: u64) -> Result<Option<Message>, Error> {
self.inner.receive_with_timeout(timeout_ms)
}
pub async fn receive(&self) -> Result<Message, Error> {
let pollable = self.inner.subscribe();
wstd::io::AsyncPollable::new(pollable).wait_for().await;
self.inner.receive()
}
pub fn close(&self, code: Option<u16>, reason: Option<String>) -> Result<(), Error> {
self.inner.close(code, reason.as_deref())
}
}