earthmc 2.0.5

Async client for interacting with the EarthMC API
Documentation
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,
}