use anyhow::Result;
use battler_data::{
DataStore,
Id,
MoveData,
};
use crate::{
WrapOptionError,
dex::{
ResourceDex,
ResourceLookup,
ResourceWrapper,
},
moves::Move,
};
#[derive(Clone)]
pub struct MoveLookup<'d> {
data: &'d dyn DataStore,
}
impl<'d> ResourceLookup<'d, MoveData> for MoveLookup<'d> {
fn new(data: &'d dyn DataStore) -> Self {
Self { data }
}
fn lookup(&self, id: &Id) -> Result<MoveData> {
self.data
.get_move(id)?
.wrap_not_found_error_with_format(format_args!("move {id}"))
}
}
pub struct MoveWrapper;
impl ResourceWrapper<MoveData, Move> for MoveWrapper {
fn wrap(id: Id, data: MoveData) -> Move {
Move::new(id, data)
}
}
pub type MoveDex<'d> = ResourceDex<'d, MoveData, Move, MoveLookup<'d>, MoveWrapper>;