27 lines
809 B
Rust
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)
|
|
}
|
|
}
|