xash3d_protocol/
lib.rs

1// SPDX-License-Identifier: LGPL-3.0-only
2// SPDX-FileCopyrightText: 2023 Denis Drakhnia <numas13@gmail.com>
3
4#![deny(unsafe_code)]
5#![deny(missing_docs)]
6
7//! Xash3D protocol between clients, servers and masters.
8
9#[macro_use]
10extern crate log;
11
12mod cursor;
13mod server_info;
14
15pub mod admin;
16pub mod color;
17pub mod filter;
18pub mod game;
19pub mod master;
20pub mod server;
21pub mod wrappers;
22
23pub use cursor::Error as CursorError;
24pub use server_info::ServerInfo;
25
26use thiserror::Error;
27
28use crate::filter::Version;
29
30/// Current protocol version.
31pub const PROTOCOL_VERSION: u8 = 49;
32/// Current client version.
33pub const CLIENT_VERSION: Version = Version::new(0, 20);
34
35/// The error type for decoding and encoding packets.
36#[derive(Error, Debug, PartialEq, Eq)]
37pub enum Error {
38    /// Failed to decode a packet.
39    #[error("Invalid packet")]
40    InvalidPacket,
41    /// Invalid region.
42    #[error("Invalid region")]
43    InvalidRegion,
44    /// Invalid client announce IP.
45    #[error("Invalid client announce IP")]
46    InvalidClientAnnounceIp,
47    /// Invalid last IP.
48    #[error("Invalid last server IP")]
49    InvalidQueryServersLast,
50    /// Server protocol version is not supported.
51    #[error("Invalid protocol version")]
52    InvalidProtocolVersion,
53    /// Cursor error.
54    #[error("{0}")]
55    CursorError(#[from] CursorError),
56    /// Invalid value for server add packet.
57    #[error("Invalid value for server add key `{0}`: {1}")]
58    InvalidServerValue(&'static str, #[source] CursorError),
59    /// Invalid value for query servers packet.
60    #[error("Invalid value for filter key `{0}`: {1}")]
61    InvalidFilterValue(&'static str, #[source] CursorError),
62}