toy-arms 0.5.1

A crates designed to ease game hack in rust.
use std::str::Utf8Error;
use winapi::shared::minwindef::HMODULE;
use crate::{get_module_handle, read_null_terminated_string};
use crate::cast;

pub struct Memory<'a> {
    pub module_name: &'a str,
    pub module_handle: HMODULE,
}

impl<'a> Memory<'a> {
    pub fn from_module(module_name: &'a str) -> Self {
        Memory {
            module_name,
            module_handle: get_module_handle(module_name),
        }
    }

    pub fn read<T>(&self, address: i32) -> *const T {
        cast!(self.module_handle as usize + address as usize, T)
    }

    pub fn read_mut<T>(&self, address: i32) -> *mut T {
        cast!(mut self.module_handle as usize + address as usize, T)
    }

    pub fn read_string(&self, address: i32) -> Result<String, Utf8Error> {
        unsafe{
            Ok(read_null_terminated_string(self.module_handle as usize + address as usize)?)
        }

    }
}