antivirus 0.1.2

antivirus is not enough! you need PROTOGENT
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::PixelFormatEnum;
use std::time::Duration;

fn main() -> Result<(), String> {
    // Embed PNG in the binary
    const IMG_BYTES: &[u8] = include_bytes!("example.png");

    // Decode PNG using the `image` crate
    let img = image::load_from_memory(IMG_BYTES).unwrap().to_rgba8();
    let (width, height) = img.dimensions();
    let pixel_data = img.into_raw(); // Vec<u8> in RGBA format

    // Init SDL2
    let sdl = sdl2::init().map_err(|e| e.to_string())?;
    let video = sdl.video().map_err(|e| e.to_string())?;

    let window = video
        .window("Embedded Image", 800, 600)
        .position_centered()
        .build()
        .map_err(|e| e.to_string())?;

    let mut canvas = window.into_canvas().accelerated().build().unwrap();

    let texture_creator = canvas.texture_creator();

    // Create a streaming texture (write pixels into it)
    let mut texture = texture_creator
        .create_texture_streaming(PixelFormatEnum::RGBA32, width, height)
        .map_err(|e| e.to_string())?;

    // Copy RGBA data into the texture
    texture.with_lock(None, |buffer: &mut [u8], _| {
        buffer.copy_from_slice(&pixel_data);
    }).unwrap();

    let mut events = sdl.event_pump().unwrap();

    'running: loop {
        for event in events.poll_iter() {
            match event {
                Event::Quit { .. }
                | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => break 'running,
                _ => {}
            }
        }
        
        if events.mouse_state().left() {
            sdl2::messagebox::show_simple_message_box(
                sdl2::messagebox::MessageBoxFlag::INFORMATION,
                "antivirus update",
                "you're computer is now fixed",
                canvas.window(),
            ).unwrap();
            break 'running
        }
        canvas.clear();
        canvas.copy(&texture, None, None).unwrap();
        canvas.present();

        std::thread::sleep(Duration::from_millis(16));
    }

    Ok(())
}