rres 0.1.5

A xrandr replacement to gather display resolutions
Documentation
pub enum Fsr {
    Ultra,
    Quality,
    Balanced,
    Performance,
}

impl TryFrom<&str> for Fsr {
    type Error = ();
    fn try_from(value: &str) -> Result<Self, Self::Error> {
        match value.to_lowercase().as_ref() {
            "ultra" => Ok(Self::Ultra),
            "quality" => Ok(Self::Quality),
            "balanced" => Ok(Self::Balanced),
            "performance" => Ok(Self::Performance),
            _ => Err(()),
        }
    }
}

impl Fsr {
    pub fn generate(&self, target_res: (u16, u16)) -> (u16, u16) {
        if target_res == (1920, 1080) {
            match self {
                Self::Ultra => (1477, 831),
                Self::Quality => (1280, 720),
                Self::Balanced => (1129, 635),
                Self::Performance => (960, 540),
            }
        } else if target_res == (2560, 1440) {
            match self {
                Self::Ultra => (1970, 1108),
                Self::Quality => (1706, 960),
                Self::Balanced => (1506, 847),
                Self::Performance => (1280, 720),
            }
        } else if target_res == (3440, 1440) {
            match self {
                Self::Ultra => (2646, 1108),
                Self::Quality => (2293, 960),
                Self::Balanced => (2024, 847),
                Self::Performance => (1720, 720),
            }
        } else if target_res == (3840, 2160) {
            match self {
                Self::Ultra => (2954, 1662),
                Self::Quality => (2560, 1440),
                Self::Balanced => (2259, 1270),
                Self::Performance => (1920, 1080),
            }
        } else {
            let factor = match self {
                Self::Ultra => 1.3f32,
                Self::Quality => 1.5f32,
                Self::Balanced => 1.7f32,
                Self::Performance => 2.0f32,
            };

            return (
                (f32::from(target_res.0) / factor).floor() as u16,
                (f32::from(target_res.1) / factor).floor() as u16,
            );
        }
    }
}