use crate::dynamic_data::script_handling::script::Script; use crate::dynamic_data::script_handling::script_set::ScriptSet; use crate::{PkmnResult, StringKey}; use std::sync::{Arc, RwLock}; 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().unwrap().has(key) } fn get_volatile_script(&self, key: &StringKey) -> Option>> { let scripts = self.volatile_scripts().read().unwrap(); let s = scripts.get(key); s.cloned() } fn add_volatile_script(&mut self, key: &StringKey) -> PkmnResult>>> { self.volatile_scripts() .write() .unwrap() .stack_or_add(key, &|| self.load_volatile_script(key)) } fn remove_volatile_script(&mut self, key: &StringKey) { self.volatile_scripts().write().unwrap().remove(key) } }