1use crate::ffi::{
2 sys::api::GetFunctionFn as GetFunctionFnFFI, CBase as CBaseFFI, CBaseInterface, CBaseLoader,
3};
4use crate::{CBase, CBaseAccess, CBaseRef};
5use std::ptr::NonNull;
6
7pub trait CBaseAPILoader<'interface> {
9 type Interface: CBaseAccess<'interface>;
11
12 unsafe fn fetch_interface(
22 base_module: Option<NonNull<CBaseFFI>>,
23 get_function_fn: GetFunctionFnFFI,
24 ) -> Self::Interface;
25}
26
27impl<'interface> CBaseAPILoader<'interface> for CBase<'interface> {
28 type Interface = Self;
29
30 unsafe fn fetch_interface(
31 base_module: Option<NonNull<CBaseFFI>>,
32 get_function_fn: GetFunctionFnFFI,
33 ) -> Self::Interface {
34 Self::new(CBaseRef::new(CBaseInterface::fetch_interface(
35 base_module,
36 get_function_fn,
37 )))
38 }
39}