use crate::types;
use serde_derive::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone, Copy)]
pub struct Error {
pub error_code: u8,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone, Copy)]
pub struct UpdatePacketDescription {
pub packet_type: types::AdminUpdateType,
pub frequencies_allowed: types::UpdateFrequencies,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Protocol {
pub version: u8,
pub update_packets: Vec<UpdatePacketDescription>,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Welcome {
pub server_name: String,
pub openttd_version: String,
pub is_dedicated: bool,
pub map_name: String,
pub map_seed: u32,
pub map_landscape: u8,
pub map_start_date: types::Date,
pub map_width: u16,
pub map_height: u16,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Date {
pub date: types::Date,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct ClientJoin {
pub id: u32,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct ClientInfo {
pub id: u32,
pub address: String,
pub name: String,
pub language: u8,
pub date_joined: types::Date,
pub company_id: u8,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct ClientUpdate {
pub id: u32,
pub name: String,
pub company_id: u8,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
pub struct ClientQuit {
pub id: u32,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
pub struct ClientError {
pub id: u32,
pub error: u8,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
pub struct CompanyNew {
pub id: u32,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct CompanyInfo {
pub id: u8,
pub name: String,
pub manager: String,
pub color: u8,
pub password_protected: bool,
pub inaugurated_year: u32,
pub ai: bool,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct CompanyUpdate {
pub id: u8,
pub name: String,
pub manager: String,
pub color: u8,
pub password_protected: bool,
pub quarters_bankrupt: u8,
pub owner_share_1: u8,
pub owner_share_2: u8,
pub owner_share_3: u8,
pub owner_share_4: u8,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
pub struct CompanyRemove {
pub id: u8,
pub reason: u8,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
pub struct CompanyEconomy {
pub id: u8,
pub money: u64,
pub loan: u64,
pub income: i64,
pub delivered_cargo: u16,
pub company_value_last: u64,
pub performance_last: u16,
pub delivered_cargo_last: u16,
pub company_value_previous: u64,
pub performance_previous: u16,
pub delivered_previous: u16,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
pub struct CompanyStats {
pub id: u8,
pub trains: u16,
pub lorries: u16,
pub busses: u16,
pub planes: u16,
pub ships: u16,
pub train_stations: u16,
pub lorry_stations: u16,
pub bus_stops: u16,
pub airports_and_heliports: u16,
pub harbours: u16,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Chat {
pub action: u8,
pub destination: u8,
pub client: u32,
pub message: String,
pub money: Option<u64>,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Rcon {
pub color: u16,
pub output: String,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Console {
pub origin: String,
pub text: String,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct CmdName {
pub id: u16,
pub name: String,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct CmdNames {
pub names: Vec<CmdName>,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct CmdLogging {
pub client_id: u32,
pub company_id: u8,
pub command_id: u16,
pub p1: u32,
pub p2: u32,
pub tile: u32,
pub text: String,
pub execution_frame: u32,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Gamescript {
pub json: String,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct RconEnd {
pub command: String,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Pong {
pub id: u32,
}
#[derive(Serialize, Deserialize, Eq, PartialEq, Clone, Debug)]
pub enum Packet {
Full,
Banned,
Error(Error),
Protocol(Protocol),
Welcome(Welcome),
Newgame,
Shutdown,
Date(Date),
ClientJoin(ClientJoin),
ClientInfo(ClientInfo),
ClientUpdate(ClientUpdate),
ClientQuit(ClientQuit),
ClientError(ClientError),
CompanyNew(CompanyNew),
CompanyInfo(CompanyInfo),
CompanyUpdate(CompanyUpdate),
CompanyRemove(CompanyRemove),
CompanyEconomy(CompanyEconomy),
CompanyStats(CompanyStats),
Chat(Chat),
Rcon(Rcon),
Console(Console),
CmdNames(CmdNames),
CmdLogging(CmdLogging),
Gamescript(Gamescript),
RconEnd(RconEnd),
Pong(Pong),
UnknownPacket {
packet_type: u8,
buffer: Vec<u8>,
},
}