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))
}

Object Safety§

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,