bevy_fuzz 0.0.2

Experimental high-performance fuzz-testing for bevy systems, emulating user UI interaction
use super::WrapElementState;
use bevy::{
    input::mouse::{MouseButtonInput, MouseScrollUnit, MouseWheel},
    prelude::MouseButton,
};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WrapMouseButtonInput {
    pub button: WrapMouseButton,
    pub state: WrapElementState,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum WrapMouseButton {
    Left,
    Right,
    Middle,
    Other(u16),
}

#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
pub enum WrapMouseScrollUnit {
    Line,
    Pixel,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WrapMouseWheel {
    pub unit: WrapMouseScrollUnit,
    pub x: f32,
    pub y: f32,
}

impl From<&WrapMouseButtonInput> for MouseButtonInput {
    fn from(inp: &WrapMouseButtonInput) -> Self {
        MouseButtonInput {
            button: (&inp.button).into(),
            state: (&inp.state).into(),
        }
    }
}

impl From<&MouseButtonInput> for WrapMouseButtonInput {
    fn from(inp: &MouseButtonInput) -> Self {
        WrapMouseButtonInput {
            button: (&inp.button).into(),
            state: (&inp.state).into(),
        }
    }
}

impl From<&WrapMouseButton> for MouseButton {
    fn from(inp: &WrapMouseButton) -> Self {
        match inp {
            WrapMouseButton::Left => MouseButton::Left,
            WrapMouseButton::Right => MouseButton::Right,
            WrapMouseButton::Middle => MouseButton::Middle,
            WrapMouseButton::Other(v) => MouseButton::Other(*v),
        }
    }
}

impl From<&MouseButton> for WrapMouseButton {
    fn from(inp: &MouseButton) -> Self {
        match inp {
            MouseButton::Left => WrapMouseButton::Left,
            MouseButton::Right => WrapMouseButton::Right,
            MouseButton::Middle => WrapMouseButton::Middle,
            MouseButton::Other(v) => WrapMouseButton::Other(*v),
        }
    }
}

impl From<&WrapMouseScrollUnit> for MouseScrollUnit {
    fn from(inp: &WrapMouseScrollUnit) -> Self {
        match inp {
            WrapMouseScrollUnit::Line => MouseScrollUnit::Line,
            WrapMouseScrollUnit::Pixel => MouseScrollUnit::Pixel,
        }
    }
}

impl From<&MouseScrollUnit> for WrapMouseScrollUnit {
    fn from(inp: &MouseScrollUnit) -> Self {
        match inp {
            MouseScrollUnit::Line => WrapMouseScrollUnit::Line,
            MouseScrollUnit::Pixel => WrapMouseScrollUnit::Pixel,
        }
    }
}

impl From<&WrapMouseWheel> for MouseWheel {
    fn from(inp: &WrapMouseWheel) -> Self {
        MouseWheel {
            unit: (&inp.unit).into(),
            x: inp.x,
            y: inp.y,
        }
    }
}

impl From<&MouseWheel> for WrapMouseWheel {
    fn from(inp: &MouseWheel) -> Self {
        WrapMouseWheel {
            unit: (&inp.unit).into(),
            x: inp.x,
            y: inp.y,
        }
    }
}