PkmnLib_rs/src/dynamic_data/script_handling/volatile_scripts_owner.rs

41 lines
1.5 KiB
Rust
Raw Normal View History

2022-07-01 15:07:22 +00:00
use std::sync::Arc;
use crate::dynamic_data::script_handling::script::{Script, ScriptContainer};
2022-06-06 11:54:59 +00:00
use crate::dynamic_data::script_handling::script_set::ScriptSet;
use crate::{PkmnResult, StringKey};
2022-06-06 11:54:59 +00:00
2022-07-01 15:07:22 +00:00
/// This trait adds a bunch of helper functions to deal with volatile scripts on a struct.
pub trait VolatileScriptsOwner {
2022-07-01 15:07:22 +00:00
/// Return the [`ScriptSet`] that are our volatile scripts.
fn volatile_scripts(&self) -> &Arc<ScriptSet>;
2022-07-01 15:07:22 +00:00
/// Loads a volatile script by name.
fn load_volatile_script(&self, key: &StringKey) -> PkmnResult<Option<Arc<dyn Script>>>;
2022-06-06 11:54:59 +00:00
2022-07-01 15:07:22 +00:00
/// Check if a volatile script with given name exists.
fn has_volatile_script(&self, key: &StringKey) -> bool {
self.volatile_scripts().has(key)
2022-06-06 11:54:59 +00:00
}
2022-07-01 15:07:22 +00:00
/// Gets a volatile script by name.
fn get_volatile_script(&self, key: &StringKey) -> Option<ScriptContainer> {
self.volatile_scripts().get(key)
2022-06-06 11:54:59 +00:00
}
2022-07-01 15:07:22 +00:00
/// Adds a volatile script by name.
fn add_volatile_script(&self, key: &StringKey) -> PkmnResult<Option<ScriptContainer>> {
2022-06-06 11:54:59 +00:00
self.volatile_scripts()
.stack_or_add(key, &|| self.load_volatile_script(key))
}
/// Adds a volatile script by name.
fn add_volatile_script_with_script(&self, script: Arc<dyn Script>) -> PkmnResult<Option<ScriptContainer>> {
self.volatile_scripts()
.stack_or_add(&script.name().clone(), &|| Ok(Some(script.clone())))
}
2022-07-01 15:07:22 +00:00
/// Removes a volatile script by name.
fn remove_volatile_script(&self, key: &StringKey) {
self.volatile_scripts().remove(key)
2022-06-06 11:54:59 +00:00
}
}