rust_openttd_admin/packet/admin/
client_packets.rs1use crate::packet::serde::WritablePacket;
5use crate::types;
6use serde_derive::{Deserialize, Serialize};
7
8pub trait Packet: WritablePacket {
10 const PACKET_TYPE: u8;
11}
12impl<T: Packet> WritablePacket for T {
13 const PACKET_TYPE: u8 = <T as Packet>::PACKET_TYPE;
14}
15
16#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
18pub struct Join<'a> {
19 pub password: &'a str,
21 pub name: &'a str,
23 pub version: &'a str,
25}
26impl<'a> Packet for Join<'a> {
27 const PACKET_TYPE: u8 = 0;
28}
29
30#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
32pub struct Quit;
33impl Packet for Quit {
34 const PACKET_TYPE: u8 = 1;
35}
36
37#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
39pub struct UpdateFrequency {
40 pub update_type: types::AdminUpdateType,
42 pub frequency: types::UpdateFrequencies,
44}
45impl Packet for UpdateFrequency {
46 const PACKET_TYPE: u8 = 2;
47}
48
49#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
51pub struct Poll {
52 pub update_type: types::AdminUpdateType,
54 pub id: u32,
58}
59impl Packet for Poll {
60 const PACKET_TYPE: u8 = 3;
61}
62
63#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
65pub struct Chat<'a> {
66 pub action: u8,
68 pub destination_type: u8,
70 pub destination_id: u32,
72 pub message: &'a str,
74}
75impl Packet for Chat<'_> {
76 const PACKET_TYPE: u8 = 4;
77}
78
79#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
81pub struct Rcon<'a> {
82 pub command: &'a str,
84}
85impl Packet for Rcon<'_> {
86 const PACKET_TYPE: u8 = 5;
87}
88
89#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
91pub struct Gamescript<'a> {
92 pub json: &'a str,
94}
95impl Packet for Gamescript<'_> {
96 const PACKET_TYPE: u8 = 6;
97}
98
99#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
101pub struct Ping {
102 pub id: u32,
104}
105impl Packet for Ping {
106 const PACKET_TYPE: u8 = 7;
107}