use std::ops::RangeInclusive;
use crate::{Error::*, Result};
const RGB_RANGE: RangeInclusive<i32> = 0..=255;
#[derive(Clone, Copy, Debug)]
pub struct Color {
red: i32,
green: i32,
blue: i32,
}
impl Color {
pub fn new(red: i32, green: i32, blue: i32) -> Result<Color> {
if !(RGB_RANGE.contains(&red) && RGB_RANGE.contains(&green) && RGB_RANGE.contains(&blue)) {
return Err(InvalidColor);
}
Ok(Color { red, green, blue })
}
pub fn red(&self) -> i32 {
self.red
}
pub fn green(&self) -> i32 {
self.green
}
pub fn blue(&self) -> i32 {
self.blue
}
pub fn rgb_unit_int(&self) -> (f64, f64, f64) {
fn unit_int(i: i32) -> f64 {
i as f64 / 255.0
}
(
unit_int(self.red),
unit_int(self.green),
unit_int(self.blue),
)
}
}