use std::marker::PhantomData; use crate::{interceptor::Interceptor, util}; pub mod crypto; pub mod hoyopass_patch; pub mod network; #[derive(thiserror::Error, Debug)] pub enum ModuleInitError { #[error("{0}")] HookFail(#[from] ilhook::HookError), } pub struct NapModuleContext { base: usize, interceptor: Interceptor, _module_type: PhantomData, } impl NapModuleContext { fn new(base: usize) -> Self { Self { base, interceptor: Interceptor::default(), _module_type: PhantomData, } } } pub trait NapModule { unsafe fn init(&mut self) -> Result<(), ModuleInitError>; } #[derive(Default)] pub struct NapModuleManager { modules: Vec>, } impl NapModuleManager { pub fn add(&mut self) where NapModuleContext: NapModule, { self.modules.push(Box::new(NapModuleContext::::new( *util::GAME_ASSEMBLY_BASE, ))); } pub unsafe fn init(&mut self) -> Result<(), ModuleInitError> { for module in self.modules.iter_mut() { module.init()?; } Ok(()) } }