1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use super::shared::Side;
4use crate::serde_helpers::base64_bytes;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct WebSocketMessage {
10 pub side: Side,
11 pub started_at: Option<DateTime<Utc>>,
12 pub ended_at: Option<DateTime<Utc>>,
13 pub payload: Payload,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct Text {
19 pub text: String,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct Data {
25 #[serde(with = "base64_bytes")]
26 pub data: Vec<u8>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct Close {
32 pub code: u16,
33 pub reason: String,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct Ping {
39 #[serde(with = "base64_bytes")]
40 pub data: Vec<u8>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub struct Pong {
46 #[serde(with = "base64_bytes")]
47 pub data: Vec<u8>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct UnknownPayload {
53 #[serde(with = "base64_bytes")]
54 pub data: Vec<u8>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59#[serde(tag = "type", rename_all = "snake_case", rename_all_fields = "camelCase")]
60pub enum Payload {
61 Text(Text),
62 Binary(Data),
63 Close(Close),
64 Ping(Ping),
65 Pong(Pong),
66 Unknown(UnknownPayload),
67}