msg.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use serde::{Deserialize, Serialize};
  2. use serde_repr::*;
  3. use tokio_tungstenite::tungstenite::Message as TokioMessage;
  4. #[derive(Serialize, Deserialize, Debug, Clone, Default)]
  5. pub struct WebSocketRawMessage {
  6. pub channel: WSChannel,
  7. pub data: Vec<u8>,
  8. }
  9. impl WebSocketRawMessage {
  10. pub fn to_bytes(&self) -> Vec<u8> {
  11. serde_json::to_vec(&self).unwrap_or_default()
  12. }
  13. pub fn from_bytes<T: AsRef<[u8]>>(bytes: T) -> Self {
  14. serde_json::from_slice(bytes.as_ref()).unwrap_or_default()
  15. }
  16. }
  17. // The lib-ws crate should not contain business logic.So WSChannel should be removed into another place.
  18. #[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Eq, PartialEq, Hash)]
  19. #[repr(u8)]
  20. pub enum WSChannel {
  21. Document = 0,
  22. Folder = 1,
  23. Database = 2,
  24. }
  25. impl std::default::Default for WSChannel {
  26. fn default() -> Self {
  27. WSChannel::Document
  28. }
  29. }
  30. impl ToString for WSChannel {
  31. fn to_string(&self) -> String {
  32. match self {
  33. WSChannel::Document => "0".to_string(),
  34. WSChannel::Folder => "1".to_string(),
  35. WSChannel::Database => "2".to_string(),
  36. }
  37. }
  38. }
  39. impl std::convert::From<WebSocketRawMessage> for TokioMessage {
  40. fn from(msg: WebSocketRawMessage) -> Self {
  41. TokioMessage::Binary(msg.to_bytes())
  42. }
  43. }