pub use samp_sdk::amx::*;
use samp_sdk::raw::types::AMX;
use crate::runtime::Runtime;
#[inline]
#[must_use]
pub fn get<'a>(ident: AmxIdent) -> Option<&'a Amx> {
let rt = Runtime::get();
rt.amx_list()
.iter()
.find(|(k, _)| *k == ident)
.map(|(_, v)| v)
}
#[inline]
pub fn add(amx: *mut AMX) {
let rt = Runtime::get();
rt.insert_amx(amx);
}
#[derive(Debug, Clone, Copy, PartialEq, Hash, Eq)]
pub struct AmxIdent {
ident: usize,
}
impl From<*mut AMX> for AmxIdent {
fn from(ptr: *mut AMX) -> AmxIdent {
AmxIdent {
ident: ptr as usize,
}
}
}
pub trait AmxExt {
fn ident(&self) -> AmxIdent;
}
impl AmxExt for Amx {
#[inline]
fn ident(&self) -> AmxIdent {
self.amx()
.expect("Amx::ident() called with null pointer")
.as_ptr()
.into()
}
}