Gen7ScriptsRs/pkmn_lib_interface/src/app_interface/dynamic_data/with_volatile.rs

27 lines
809 B
Rust

use crate::handling::Script;
use crate::PkmnResult;
use alloc::boxed::Box;
pub trait WithVolatile {
fn has_volatile(&self, script_name: &str) -> PkmnResult<bool>;
fn add_volatile(&self, script: Box<dyn Script>) -> PkmnResult<&dyn Script>;
fn add_volatile_by_name(&self, script_name: &str) -> PkmnResult<&dyn Script>;
fn remove_volatile(&self, script: &dyn Script) -> PkmnResult<()>;
fn get_volatile_script(&self, script_name: &str) -> PkmnResult<Option<&dyn Script>>;
}
pub fn get_volatile_as<'a, T>(
v: &'a dyn WithVolatile,
script_name: &str,
) -> PkmnResult<Option<&'a T>>
where
T: Script + 'static,
{
let s = v.get_volatile_script(script_name)?;
if let Some(s) = s {
Ok(Some(s.as_any().downcast_ref::<T>().unwrap()))
} else {
Ok(None)
}
}