dioxus_liveview::pool

Trait LiveViewSocket

Source
pub trait LiveViewSocket:
    SinkExt<Vec<u8>, Error = LiveViewError>
    + StreamExt<Item = Result<Vec<u8>, LiveViewError>>
    + Send
    + 'static { }
Expand description

A LiveViewSocket is a Sink and Stream of Strings that Dioxus uses to communicate with the client

Most websockets from most HTTP frameworks can be converted into a LiveViewSocket using the appropriate adapter.

You can also convert your own socket into a LiveViewSocket by implementing this trait. This trait is an auto trait, meaning that as long as your type implements Stream and Sink, you can use it as a LiveViewSocket.

For example, the axum implementation is a really small transform:

pub fn axum_socket(ws: WebSocket) -> impl LiveViewSocket {
    ws.map(transform_rx)
        .with(transform_tx)
        .sink_map_err(|_| LiveViewError::SendingFailed)
}

fn transform_rx(message: Result<Message, axum::Error>) -> Result<String, LiveViewError> {
    message
        .map_err(|_| LiveViewError::SendingFailed)?
        .into_text()
        .map_err(|_| LiveViewError::SendingFailed)
}

async fn transform_tx(message: String) -> Result<Message, axum::Error> {
    Ok(Message::Text(message))
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<S> LiveViewSocket for S
where S: SinkExt<Vec<u8>, Error = LiveViewError> + StreamExt<Item = Result<Vec<u8>, LiveViewError>> + Send + 'static,