use crate::{LiveViewError, LiveViewSocket}; use axum::extract::ws::{Message, WebSocket}; use futures_util::{SinkExt, StreamExt}; /// Convert an Axum WebSocket into a `LiveViewSocket`. /// /// This is required to launch a LiveView app using the Axum web framework. 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) -> Result, LiveViewError> { message .map_err(|_| LiveViewError::SendingFailed)? .into_text() .map(|s| s.into_bytes()) .map_err(|_| LiveViewError::SendingFailed) } async fn transform_tx(message: Vec) -> Result { Ok(Message::Binary(message)) }