team04_server/messages/
game_end.rs

1use std::collections::HashMap;
2
3use crate::lobby::state::clients::PlayerId;
4
5use super::*;
6
7pub struct GameEnd {
8    pub winner: PlayerId,
9    pub global_stats: Vec<GlobalStat>,
10    pub player_stats: Vec<PlayerStat>,
11}
12
13#[derive(Serialize)]
14#[serde(rename_all = "camelCase")]
15pub struct GlobalStat {
16    pub display_name: String,
17    pub display_value: String,
18}
19
20#[derive(Serialize)]
21#[serde(rename_all = "camelCase")]
22pub struct PlayerStat {
23    pub display_name: String,
24    pub display_value: HashMap<PlayerId, String>,
25}
26
27impl MessageTx for GameEnd {
28    fn serialize(&self) -> String {
29        #[derive(Serialize)]
30        #[serde(rename_all = "camelCase")]
31        struct GameEnd<'a> {
32            #[serde(rename = "messageType")]
33            message_type: &'static str,
34            pub global_stats: &'a [GlobalStat],
35            pub player_stats: &'a [PlayerStat],
36        }
37
38        let message = GameEnd {
39            message_type: "GAME_END",
40            global_stats: &self.global_stats,
41            player_stats: &self.player_stats,
42        };
43
44        serialize(&message)
45    }
46}