use crate::error::{Error, Result};
use std::io::Read;
use tokio_tungstenite::tungstenite::Message;
pub fn decode_frame(msg: Message) -> Result<Option<String>> {
match msg {
Message::Text(text) => Ok(Some(text.to_string())),
Message::Binary(data) => {
let mut decoder = flate2::read::DeflateDecoder::new(&data[..]);
let mut output = String::new();
decoder
.read_to_string(&mut output)
.map_err(|e| Error::Decompression(e.to_string()))?;
Ok(Some(output))
}
Message::Ping(_) | Message::Pong(_) => Ok(None),
Message::Close(_) => Err(Error::ConnectionClosed),
_ => Ok(None),
}
}