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 {
#[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,
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,
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),
}