summaryrefslogtreecommitdiff
path: root/server/protocol/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/protocol/src')
-rw-r--r--server/protocol/src/lib.rs33
1 files changed, 26 insertions, 7 deletions
diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs
index 74d463a1..552c4eed 100644
--- a/server/protocol/src/lib.rs
+++ b/server/protocol/src/lib.rs
@@ -20,7 +20,7 @@ use bincode::{
Decode, Encode,
};
use glam::{IVec2, Vec2};
-use serde::{Deserialize, Serialize};
+use serde::{Deserialize, Deserializer, Serialize};
use std::{collections::HashSet, sync::LazyLock};
pub use glam;
@@ -48,32 +48,32 @@ pub const BINCODE_CONFIG: Configuration<LittleEndian, Varint, Limit<4096>> =
Debug, Clone, Copy, Serialize, Deserialize, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
#[serde(transparent)]
-pub struct PlayerID(pub i64);
+pub struct PlayerID(#[serde(deserialize_with = "deser_i64")] pub i64);
#[derive(
Debug, Clone, Copy, Serialize, Deserialize, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
#[serde(transparent)]
-pub struct ItemIndex(pub usize);
+pub struct ItemIndex(#[serde(deserialize_with = "deser_usize")] pub usize);
#[derive(
Debug, Clone, Copy, Serialize, Deserialize, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
#[serde(transparent)]
-pub struct TileIndex(pub usize);
+pub struct TileIndex(#[serde(deserialize_with = "deser_usize")] pub usize);
#[derive(
Debug, Clone, Copy, Serialize, Deserialize, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
#[serde(transparent)]
-pub struct RecipeIndex(pub usize);
+pub struct RecipeIndex(#[serde(deserialize_with = "deser_usize")] pub usize);
#[derive(
Debug, Clone, Copy, Serialize, Deserialize, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
#[serde(transparent)]
-pub struct DemandIndex(pub usize);
+pub struct DemandIndex(#[serde(deserialize_with = "deser_usize")] pub usize);
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Encode, Decode, PartialEq, Eq, Hash)]
#[serde(transparent)]
-pub struct Hand(pub usize);
+pub struct Hand(#[serde(deserialize_with = "deser_usize")] pub usize);
#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)]
pub struct MapMetadata {
@@ -110,6 +110,7 @@ pub struct Gamedata {
pub enum PacketS {
Join {
name: String,
+ #[serde(deserialize_with = "deser_i32")]
character: i32,
#[serde(default = "chef_class")]
class: PlayerClass,
@@ -130,6 +131,7 @@ pub enum PacketS {
Interact {
player: PlayerID,
hand: Hand,
+ #[serde(deserialize_with = "deser_ivec2_opt")]
#[bincode(with_serde)]
pos: Option<IVec2>,
},
@@ -420,3 +422,20 @@ pub enum DocumentAlign {
FlowEnd,
Bottom,
}
+
+fn deser_i64<'de, D: Deserializer<'de>>(deserializer: D) -> Result<i64, D::Error> {
+ let x = f64::deserialize(deserializer)?;
+ Ok(x.trunc() as i64)
+}
+fn deser_i32<'de, D: Deserializer<'de>>(deserializer: D) -> Result<i32, D::Error> {
+ let x = f64::deserialize(deserializer)?;
+ Ok(x.trunc() as i32)
+}
+fn deser_usize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<usize, D::Error> {
+ let x = f64::deserialize(deserializer)?;
+ Ok(x.trunc() as usize)
+}
+fn deser_ivec2_opt<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Option<IVec2>, D::Error> {
+ let x = Option::<Vec2>::deserialize(deserializer)?;
+ Ok(x.map(|v| v.as_ivec2()))
+}