pub type Line = Vec<(f32, f32, u32)>; #[derive(Debug, Clone, Copy, Default, PartialEq)] pub struct Point { pub x: f32, pub y: f32, pub color: Color, } #[derive(Debug, Clone, Copy, Default, PartialEq)] pub struct Color { pub r: u8, pub g: u8, pub b: u8, } impl From for u32 { fn from(value: Color) -> Self { let r = value.r as u32; let g = value.g as u32; let b = (value.b) as u32; (r << 16) + (g << 8) + b } } impl From<(f32, f32, u32)> for Point { fn from((x, y, color): (f32, f32, u32)) -> Point { let r = (color >> 16) as u8; let g = ((color >> 8) & 255) as u8; let b = (color & 255) as u8; Point { x, y, color: Color { r, g, b }, } } } impl From for (f32, f32, u32) { fn from(pt: Point) -> (f32, f32, u32) { (pt.x, pt.y, pt.color.into()) } }