ui-automation 0.1.1

Control the User Interface, cross-platform.
Documentation
// Copyright (C) 2024 Tristan Gerritsen <tristan@thewoosh.org>
// All Rights Reserved.

use std::fmt::Display;

#[derive(Debug, Default, Clone, Copy, PartialEq, PartialOrd)]
pub struct Position {
    x: f64,
    y: f64,
}

impl Position {
    #[must_use]
    pub const fn new(x: f64, y: f64) -> Self {
        Self {
            x,
            y,
        }
    }

    #[must_use]
    pub const fn x(&self) -> f64 {
        self.x
    }

    #[must_use]
    pub const fn y(&self) -> f64 {
        self.y
    }
}

impl Display for Position {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.write_fmt(format_args!("({}, {})", self.x, self.y))
    }
}

impl From<(f64, f64)> for Position {
    fn from(value: (f64, f64)) -> Self {
        Self::new(value.0, value.1)
    }
}

impl From<(f32, f32)> for Position {
    fn from(value: (f32, f32)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i8, i8)> for Position {
    fn from(value: (i8, i8)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i16, i16)> for Position {
    fn from(value: (i16, i16)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i32, i32)> for Position {
    fn from(value: (i32, i32)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i64, i64)> for Position {
    fn from(value: (i64, i64)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(isize, isize)> for Position {
    fn from(value: (isize, isize)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u8, i8)> for Position {
    fn from(value: (u8, i8)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u16, i16)> for Position {
    fn from(value: (u16, i16)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u32, i32)> for Position {
    fn from(value: (u32, i32)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u64, i64)> for Position {
    fn from(value: (u64, i64)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(usize, isize)> for Position {
    fn from(value: (usize, isize)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}


impl From<(i8, u8)> for Position {
    fn from(value: (i8, u8)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i16, u16)> for Position {
    fn from(value: (i16, u16)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i32, u32)> for Position {
    fn from(value: (i32, u32)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(i64, u64)> for Position {
    fn from(value: (i64, u64)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(isize, usize)> for Position {
    fn from(value: (isize, usize)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u8, u8)> for Position {
    fn from(value: (u8, u8)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u16, u16)> for Position {
    fn from(value: (u16, u16)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u32, u32)> for Position {
    fn from(value: (u32, u32)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(u64, u64)> for Position {
    fn from(value: (u64, u64)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}

impl From<(usize, usize)> for Position {
    fn from(value: (usize, usize)) -> Self {
        Self::new(value.0 as f64, value.1 as f64)
    }
}