salvo_adapter.rs 763 B

1234567891011121314151617181920212223
  1. use futures_util::{SinkExt, StreamExt};
  2. use salvo::ws::{Message, WebSocket};
  3. use crate::{LiveViewError, LiveViewSocket};
  4. /// Convert a salvo websocket into a LiveViewSocket
  5. ///
  6. /// This is required to launch a LiveView app using the warp web framework
  7. pub fn salvo_socket(ws: WebSocket) -> impl LiveViewSocket {
  8. ws.map(transform_rx)
  9. .with(transform_tx)
  10. .sink_map_err(|_| LiveViewError::SendingFailed)
  11. }
  12. fn transform_rx(message: Result<Message, salvo::Error>) -> Result<Vec<u8>, LiveViewError> {
  13. let as_bytes = message.map_err(|_| LiveViewError::SendingFailed)?;
  14. Ok(as_bytes.into())
  15. }
  16. async fn transform_tx(message: Vec<u8>) -> Result<Message, salvo::Error> {
  17. Ok(Message::text(String::from_utf8_lossy(&message).to_string()))
  18. }