use alloc::{
string::String,
vec::Vec,
};
use battler_data::{
Gender,
Nature,
StatTable,
Type,
};
use serde::{
Deserialize,
Serialize,
};
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MonPersistentBattleData {
pub hp: Option<u16>,
#[serde(default)]
pub move_pp: Vec<u8>,
pub status: Option<String>,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MonData {
pub name: String,
pub species: String,
pub ability: String,
pub moves: Vec<String>,
pub item: Option<String>,
#[serde(default)]
pub pp_boosts: Vec<u8>,
#[serde(default)]
pub nature: Nature,
#[serde(default)]
pub true_nature: Option<Nature>,
#[serde(default)]
pub gender: Gender,
#[serde(default)]
pub evs: StatTable,
#[serde(default)]
pub ivs: StatTable,
#[serde(default)]
pub level: u8,
#[serde(default)]
pub experience: u32,
#[serde(default)]
pub shiny: bool,
#[serde(default)]
pub friendship: u8,
pub ball: Option<String>,
pub hidden_power_type: Option<Type>,
#[serde(default)]
pub different_original_trainer: bool,
#[serde(default)]
pub dynamax_level: u8,
#[serde(default)]
pub gigantamax_factor: bool,
pub tera_type: Option<Type>,
#[serde(default)]
pub persistent_battle_data: MonPersistentBattleData,
}