use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct PositionXZ {
pub x: f32,
pub z: f32,
}
impl PositionXZ {
pub fn new(x: f32, z: f32) -> Self {
Self { x, z }
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ChunkCoordinate {
pub x: i32,
pub z: i32,
}
impl From<[i32; 2]> for ChunkCoordinate {
fn from(value: [i32; 2]) -> Self {
Self {
x: value[0],
z: value[1],
}
}
}
impl From<ChunkCoordinate> for [i32; 2] {
fn from(value: ChunkCoordinate) -> Self {
[value.x, value.z]
}
}
impl Serialize for ChunkCoordinate {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
[self.x, self.z].serialize(serializer)
}
}
impl<'de> Deserialize<'de> for ChunkCoordinate {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
<[i32; 2]>::deserialize(deserializer).map(Self::from)
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct PositionXYZ {
pub x: i32,
pub y: i32,
pub z: i32,
}
impl From<[i32; 3]> for PositionXYZ {
fn from(value: [i32; 3]) -> Self {
Self {
x: value[0],
y: value[1],
z: value[2],
}
}
}
impl From<PositionXYZ> for [i32; 3] {
fn from(value: PositionXYZ) -> Self {
[value.x, value.y, value.z]
}
}
impl Serialize for PositionXYZ {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
[self.x, self.y, self.z].serialize(serializer)
}
}
impl<'de> Deserialize<'de> for PositionXYZ {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
<[i32; 3]>::deserialize(deserializer).map(Self::from)
}
}
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
pub struct WorldLocation {
pub world: String,
pub x: f32,
pub y: f32,
pub z: f32,
pub pitch: f32,
pub yaw: f32,
}