1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
pub mod channel;
pub mod current;

use crate::model::{Color, LightUser};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamUser {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub color: Option<Color>,
    pub user: LightUser,
    pub rating: u32,
    pub seconds: u32,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(tag = "t", content = "d", rename_all = "camelCase")]
pub enum Event {
    Featured {
        id: String,
        orientation: Color,
        players: [StreamUser; 2],
        fen: String,
    },

    Fen {
        fen: String,
        #[serde(rename = "lm")]
        #[serde(skip_serializing_if = "Option::is_none")]
        last_move: Option<String>,
        #[serde(rename = "wc")]
        #[serde(skip_serializing_if = "Option::is_none")]
        white_centipawns: Option<u32>,
        #[serde(rename = "bc")]
        #[serde(skip_serializing_if = "Option::is_none")]
        black_centipawns: Option<u32>,
    },
}