earthmc 2.0.1

Async client for interacting with the EarthMC API
Documentation
use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};
use uuid::Uuid;

use crate::model::{
    color::Color, location::WorldLocation, named_uuid::NamedUuid,
    timestamp::Timestamp,
};

#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Nation {
    pub name: String,
    pub uuid: Uuid,
    pub board: Option<String>,
    pub dynmap_colour: Color,
    pub dynmap_outline: Color,
    pub wiki: Option<String>,
    #[serde(rename = "king")]
    pub leader: NamedUuid,
    pub capital: NamedUuid,
    pub timestamps: NationTimestamps,
    pub status: NationStatus,
    pub stats: NationStats,
    pub coordinates: NationCoordinates,
    pub residents: Vec<NamedUuid>,
    pub towns: Vec<NamedUuid>,
    pub allies: Vec<NamedUuid>,
    pub enemies: Vec<NamedUuid>,
    pub sanctioned: Vec<NamedUuid>,
    pub ranks: BTreeMap<NationRankKind, Vec<NamedUuid>>,
}

#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct NationTimestamps {
    /// Creation time.
    #[cfg_attr(
        feature = "chrono",
        serde(with = "crate::model::timestamp::seconds")
    )]
    pub registered: Timestamp,
}

#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct NationStatus {
    pub is_public: bool,
    /// Invite-less joining is enabled.
    pub is_open: bool,
    pub is_neutral: bool,
}

#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct NationStats {
    pub num_town_blocks: i32,
    pub num_residents: i32,
    pub num_towns: i32,
    pub num_allies: i32,
    pub num_enemies: i32,
    /// Shown on `/n` in-game.
    pub balance: f64,
}

#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct NationCoordinates {
    pub spawn: WorldLocation,
}

#[derive(
    Clone, Deserialize, Serialize, PartialEq, Eq, Hash, PartialOrd, Ord, Debug,
)]
#[serde(rename_all = "PascalCase")]
pub enum NationRankKind {
    Chancellor,
    Colonist,
    Diplomat,
    Treasurer,
    #[serde(untagged)]
    Other(String),
}