use serde::{Deserialize, Serialize};
use std::fmt::Display;
use crate::numbers::MaybeImprecise;
use super::{Keyword, kins::Kin};
pub trait Read {
fn get_num_property(&self, property: &Number) -> Option<MaybeImprecise>;
fn get_text_property(&self, property: &Text) -> Option<String>;
fn get_vec_property(&self, property: &Array) -> Option<&[String]>;
fn get_keywords(&self) -> Option<&[Keyword]>;
fn get_name(&self) -> Option<&str>;
fn get_description(&self) -> Option<&str>;
fn get_type(&self) -> Option<&str>;
fn get_kin(&self) -> Option<&Kin>;
fn get_flavor_text(&self) -> Option<&str>;
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum Number {
Cost,
FlipCost,
Health,
Power,
Defense,
}
impl Display for Number {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Cost => write!(f, "Cost"),
Self::Health => write!(f, "Health"),
Self::Power => write!(f, "Power"),
Self::Defense => write!(f, "Defense"),
Self::FlipCost => write!(f, "Flip Cost"),
}
}
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum Array {
Functions,
}
impl Display for Array {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Functions => write!(f, "Functions"),
}
}
}
#[derive(PartialEq, Eq, Hash, Debug, Clone, Copy, Serialize, Deserialize)]
pub enum Text {
Id,
Name,
Type,
Description,
FlavorText,
SetId,
Chapter,
}
impl Display for Text {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Id => write!(f, "ID"),
Self::Name => write!(f, "Name"),
Self::Type => write!(f, "Type"),
Self::Description => write!(f, "Description"),
Self::FlavorText => write!(f, "FlavorText"),
Self::SetId => write!(f, "SetId"),
Self::Chapter => write!(f, "Chapter"),
}
}
}