use std::num::NonZeroU8;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{ClientExecutor, RequestBuilder};
use super::{ItemBinding, ItemStats};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CharacterBackstory {
pub backstory: Backstory,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CharacterCore {
pub name: String,
pub race: Race,
pub gender: Gender,
pub profession: Profession,
pub level: NonZeroU8,
pub guild: Option<String>,
pub age: u64,
pub last_modified: DateTime<Utc>,
pub created: DateTime<Utc>,
pub deaths: u64,
pub title: Option<u64>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CharacterCrafting {
pub crafting: Crafting,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CharacterEquipment {
pub equipment: Equipment,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Character {
pub name: String,
pub race: Race,
pub gender: Gender,
pub profession: Profession,
pub level: NonZeroU8,
pub guild: Option<String>,
pub age: u64,
pub last_modified: DateTime<Utc>,
pub created: DateTime<Utc>,
pub deaths: u64,
pub title: Option<u64>,
pub backstory: Backstory,
pub crafting: Crafting,
pub equipment: Equipment,
pub flags: CharacterFlags,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Race {
Asura,
Charr,
Human,
Norn,
Sylvari,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Gender {
Male,
Female,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Profession {
Elementalist,
Engineer,
Guardian,
Mesmer,
Necromancer,
Ranger,
Revenant,
Thief,
Warrior,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Backstory(pub Vec<String>);
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Crafting(pub Vec<CraftingDiscipline>);
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct CraftingDiscipline {
pub discipline: Discipline,
pub rating: u16,
pub active: bool,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Discipline {
Armorsmith,
Artificer,
Chef,
Huntsman,
Jeweler,
Leatherworker,
Scribe,
Weaponsmith,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct WvWAbility {
pub id: u64,
pub rank: u8,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CharacterFlags(Vec<CharFlag>);
impl CharacterFlags {
pub fn beta(&self) -> bool {
self.0.iter().any(|f| *f == CharFlag::Beta)
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
enum CharFlag {
Beta,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Equipment(pub Vec<EquipmentItem>);
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct EquipmentItem {
pub id: u64,
pub slot: EquipmentSlot,
pub infusions: Option<Vec<u64>>,
pub upgrades: Option<Vec<u64>>,
pub skin: Option<u64>,
pub stats: Option<ItemStats>,
pub binding: ItemBinding,
pub bound_to: Option<String>,
pub location: ItemLocation,
pub tabs: Vec<u64>,
pub charges: Option<u16>,
pub dyes: Vec<u64>,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EquipmentSlot {
HelmAquatic,
Backpack,
Coat,
Boots,
Gloves,
Helm,
Leggings,
Shoulders,
Accessory1,
Accessory2,
Ring1,
Ring2,
Amulet,
WeaponAquatic1,
WeaponAquatic2,
WeaponA1,
WeaponA2,
WeaponB1,
WeaponB2,
Sickle,
Axe,
Pick,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ItemLocation {
Equipped,
Armory,
EquippedFromLegendaryArmory,
LegendaryArmory,
}
pub struct BuildTab {
pub id: u64,
pub is_active: u64,
pub build: Build,
}
pub struct Build {
pub name: String,
pub profession: Profession,
pub specializations: [Specialization; 3],
pub skills: Skills,
pub aquatic_skills: Skills,
pub legends: Option<Vec<String>>,
pub aquatic_legends: Option<Vec<String>>,
pub pets: Option<Pets>,
}
pub struct Specialization {
pub id: Option<u16>,
pub traits: Option<[u64; 3]>,
}
pub struct Skills {
pub heal: Option<u64>,
pub utilities: Option<[u64; 3]>,
pub elite: Option<u64>,
}
pub struct Pets {
pub terrestrial: Vec<u64>,
pub aquatic: Vec<u64>,
}