/* * Copyright (C) Oscar Shrimpton 2020 * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ //! Various types used in parsed BSP files. use std::convert::TryInto; /// RGBA Colour (0-255) #[derive(Debug, Clone, Copy, PartialEq)] pub struct Rgba { pub r: u8, pub g: u8, pub b: u8, pub a: u8, } impl Rgba { /// Interpret the given bytes as an RGBA colour. pub fn from_bytes(bytes: [u8; 4]) -> Rgba { Rgba { r: bytes[0], g: bytes[1], b: bytes[2], a: bytes[3], } } /// Convert a slice to an RGBA colour /// # Panics /// If slice is not 4 bytes long. pub fn from_slice(slice: &[u8]) -> Rgba { Rgba::from_bytes(slice.try_into().unwrap()) } } /// RGB Colour (0-255) #[derive(Debug, Clone, Copy, PartialEq)] pub struct Rgb { pub r: u8, pub g: u8, pub b: u8, } impl Rgb { /// 255, 255, 255 pub fn white() -> Rgb { Rgb { r: 255, g: 255, b: 255, } } /// Interpret the given bytes as an RGB colour. pub fn from_bytes(bytes: [u8; 3]) -> Rgb { Rgb { r: bytes[0], g: bytes[1], b: bytes[2], } } /// Convert a slice to an RGB colour /// # Panics /// If slice is not 3 bytes long. pub fn from_slice(slice: &[u8]) -> Rgb { Rgb::from_bytes(slice.try_into().unwrap()) } } #[derive(Debug)] /// An error encountered while parsing. pub enum ParseError { Unsupported, Invalid, } /// Standard result type. pub type Result = std::result::Result;