use alloc::vec::Vec;
use anyhow::Result;
use crate::{
AbilityData,
ClauseData,
ConditionData,
Id,
ItemData,
MoveData,
SpeciesData,
TypeChart,
};
pub trait DataStore: Send + Sync {
fn all_move_ids(&self, filter: &dyn Fn(&MoveData) -> bool) -> Result<Vec<Id>>;
fn get_type_chart(&self) -> Result<TypeChart>;
fn translate_alias(&self, id: &Id) -> Result<Option<Id>>;
fn get_ability(&self, id: &Id) -> Result<Option<AbilityData>>;
fn get_clause(&self, id: &Id) -> Result<Option<ClauseData>>;
fn get_condition(&self, id: &Id) -> Result<Option<ConditionData>>;
fn get_item(&self, id: &Id) -> Result<Option<ItemData>>;
fn get_move(&self, id: &Id) -> Result<Option<MoveData>>;
fn get_species(&self, id: &Id) -> Result<Option<SpeciesData>>;
}
pub trait DataStoreByName: DataStore {
fn get_ability_by_name(&self, name: &str) -> Result<Option<AbilityData>>;
fn get_clause_by_name(&self, name: &str) -> Result<Option<ClauseData>>;
fn get_condition_by_name(&self, name: &str) -> Result<Option<ConditionData>>;
fn get_item_by_name(&self, name: &str) -> Result<Option<ItemData>>;
fn get_move_by_name(&self, name: &str) -> Result<Option<MoveData>>;
fn get_species_by_name(&self, name: &str) -> Result<Option<SpeciesData>>;
}