use crate::dynamic_data::script_handling::script::{Script, ScriptContainer}; use crate::dynamic_data::script_handling::script_set::ScriptSet; use crate::{PkmnResult, StringKey}; use parking_lot::RwLock; use std::sync::Arc; pub trait VolatileScripts<'a> { fn volatile_scripts(&self) -> &Arc>; fn load_volatile_script(&self, key: &StringKey) -> PkmnResult>>; fn has_volatile_script(&self, key: &StringKey) -> bool { self.volatile_scripts().read().has(key) } fn get_volatile_script(&self, key: &StringKey) -> Option { let scripts = self.volatile_scripts().read(); let s = scripts.get(key); s.cloned() } fn add_volatile_script(&mut self, key: &StringKey) -> PkmnResult> { self.volatile_scripts() .write() .stack_or_add(key, &|| self.load_volatile_script(key)) } fn remove_volatile_script(&mut self, key: &StringKey) { self.volatile_scripts().write().remove(key) } }