process-memory 0.2.2

A rust library that can read/write/inject into other processes.
Documentation
extern crate process_memory;

use process_memory::data_member::*;
use process_memory::TryIntoProcessHandle;
use std::error::Error;

use std::process;

trait Attempt {
    fn attempt(&self);
}

impl<T> Attempt for Result<(), T> {
    fn attempt(&self) {
        match self {
            &Ok(_) => {},
            &Err(_) => {
                println!("Couldn't write to memory!"); 
                process::exit(1);
            }
        }
    }
}

fn main() { 
    let process_handle = match process_memory::platform::get_pid("MirrorsEdgeCatalyst.exe").try_into_process_handle() {
        Ok(x) => x,
        Err(err) => {
            println!("Error!\n\n{}", err.description());
            return;
        }
    };

    let mut spawn_timer = DataMember::<f32>::new();
    spawn_timer.set_offset(vec![0x142142ad8, 0xac]);

    let mut level_warmup = DataMember::<f32>::new();
    level_warmup.set_offset(vec![0x142142ad8, 0x9c]);

    let mut emitters_enabled = DataMember::<bool>::new(); 
    emitters_enabled.set_offset(vec![0x1423e4478, 0xac]); 

    spawn_timer.write(process_handle, "1").attempt();
    level_warmup.write(process_handle, "1").attempt();
    emitters_enabled.write(process_handle, "false").attempt();

    println!("Spawn timer: {}", match spawn_timer.read(process_handle) {
        Ok(x) => x,
        Err(_) => "Couldn't read memory!".to_owned()
    });
    println!("Level warmup: {}", match level_warmup.read(process_handle) {
        Ok(x) => x,
        Err(_) => "Couldn't read memory!".to_owned()
    });
    println!("Emitters enabled: {}", match emitters_enabled.read(process_handle) {
        Ok(x) => x,
        Err(_) => "Couldn't read memory!".to_owned()
    });
}