use alloc::string::String;
use battler_data::{
Fraction,
Id,
MoveData,
};
use hashbrown::HashMap;
use serde::{
Deserialize,
Serialize,
};
use crate::effect::fxlang::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum LocalDataValue {
String(String),
Number(Fraction<i64>),
}
impl Into<Value> for LocalDataValue {
fn into(self) -> Value {
match self {
Self::String(val) => Value::String(val),
Self::Number(val) => Value::Fraction(val),
}
}
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct LocalData {
#[serde(default)]
pub moves: HashMap<Id, MoveData>,
#[serde(default)]
pub values: HashMap<String, LocalDataValue>,
}
impl LocalData {
pub fn extend(&mut self, other: Self) {
self.moves.extend(other.moves);
self.values.extend(other.values);
}
}