pub mod platform;
pub mod platform_sync;
pub mod sync;
#[cfg(feature = "graphics")]
mod graphics {
pub use raylib;
pub use raylib::consts::KeyboardKey::*;
pub use raylib::prelude::*;
use std::str::FromStr;
pub const RED: Color = Color {
r: 230, g: 41, b: 55, a: 255,
};
pub const GREEN: Color = Color {
r: 117, g: 203, b: 100, a: 255,
};
pub const BLUE: Color = Color {
r: 51, g: 122, b: 206, a: 255,
};
pub const YELLOW: Color = Color {
r: 253, g: 249, b: 0, a: 255,
};
pub const WHITE: Color = Color {
r: 255, g: 255, b: 255, a: 255,
};
pub const BLACK: Color = Color {
r: 0, g: 0, b: 0, a: 255,
};
pub const CYAN: Color = Color {
r: 0, g: 255, b: 255, a: 255,
};
pub const MAGENTA: Color = Color {
r: 255, g: 0, b: 255, a: 255,
};
pub const ORANGE: Color = Color {
r: 255, g: 165, b: 0, a: 255,
};
pub const PINK: Color = Color {
r: 255, g: 192, b: 203, a: 255,
};
pub const PURPLE: Color = Color {
r: 128, g: 0, b: 128, a: 255,
};
pub const BROWN: Color = Color {
r: 165, g: 42, b: 42, a: 255,
};
pub const GRAY: Color = Color {
r: 128, g: 128, b: 128, a: 255,
};
pub const LIME: Color = Color {
r: 0, g: 255, b: 0, a: 255,
};
pub const NAVY: Color = Color {
r: 0, g: 0, b: 128, a: 255,
};
pub const OLIVE: Color = Color {
r: 128, g: 128, b: 0, a: 255,
};
pub const TEAL: Color = Color {
r: 0, g: 128, b: 128, a: 255,
};
pub const MAROON: Color = Color {
r: 128, g: 0, b: 0, a: 255,
};
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ColorRyDit {
Rojo, Verde, Azul, Amarillo, Blanco, Negro,
Cyan, Magenta, Naranja, Rosa, Morado, Cafe,
Gris, Lima, AzulOscuro, Oliva, Turquesa, Vino,
}
impl ColorRyDit {
pub fn to_color(&self) -> Color {
match self {
Self::Rojo => RED, Self::Verde => GREEN, Self::Azul => BLUE,
Self::Amarillo => YELLOW, Self::Blanco => WHITE, Self::Negro => BLACK,
Self::Cyan => CYAN, Self::Magenta => MAGENTA, Self::Naranja => ORANGE,
Self::Rosa => PINK, Self::Morado => PURPLE, Self::Cafe => BROWN,
Self::Gris => GRAY, Self::Lima => LIME, Self::AzulOscuro => NAVY,
Self::Oliva => OLIVE, Self::Turquesa => TEAL, Self::Vino => MAROON,
}
}
}
impl FromStr for ColorRyDit {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"rojo" | "red" => Ok(Self::Rojo),
"verde" | "green" => Ok(Self::Verde),
"azul" | "blue" => Ok(Self::Azul),
"amarillo" | "yellow" => Ok(Self::Amarillo),
"blanco" | "white" => Ok(Self::Blanco),
"negro" | "black" => Ok(Self::Negro),
"cyan" | "celeste" => Ok(Self::Cyan),
"magenta" | "fucsia" => Ok(Self::Magenta),
"naranja" | "orange" => Ok(Self::Naranja),
"rosa" | "pink" => Ok(Self::Rosa),
"morado" | "purple" | "violeta" => Ok(Self::Morado),
"cafe" | "brown" | "marron" => Ok(Self::Cafe),
"gris" | "gray" | "grey" => Ok(Self::Gris),
"lima" | "lime" => Ok(Self::Lima),
"azuloscuro" | "navy" | "azul oscuro" => Ok(Self::AzulOscuro),
"oliva" | "olive" => Ok(Self::Oliva),
"turquesa" | "teal" => Ok(Self::Turquesa),
"vino" | "maroon" | "granate" => Ok(Self::Vino),
_ => Ok(Self::Negro),
}
}
}
pub fn init_window(titulo: &str, w: i32, h: i32) -> (raylib::RaylibHandle, raylib::RaylibThread) {
raylib::init().size(w, h).title(titulo).build()
}
}
#[cfg(feature = "graphics")]
pub use graphics::*;
pub use platform::{current_platform, Platform, PlatformConfig};
pub use platform_sync::{PlatformSync, PlatformSyncMode};
pub use sync::{Mutex, RwLock};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_version() {
assert_eq!(VERSION, "0.2.0");
}
#[test]
fn test_exports() {
let _ = current_platform();
let _ = PlatformConfig::for_current();
let _ = PlatformSync::new();
let _ = Mutex::new(0);
let _ = RwLock::new(0);
}
#[cfg(feature = "graphics")]
mod color_tests {
use super::*;
use std::str::FromStr;
#[test]
fn test_color_from_str() {
assert_eq!(ColorRyDit::from_str("rojo").unwrap(), ColorRyDit::Rojo);
assert_eq!(ColorRyDit::from_str("RED").unwrap(), ColorRyDit::Rojo);
assert_eq!(ColorRyDit::from_str("verde").unwrap(), ColorRyDit::Verde);
assert_eq!(ColorRyDit::from_str("azul").unwrap(), ColorRyDit::Azul);
assert_eq!(ColorRyDit::from_str("blanco").unwrap(), ColorRyDit::Blanco);
assert_eq!(ColorRyDit::from_str("otro").unwrap(), ColorRyDit::Negro);
assert_eq!(ColorRyDit::from_str("cyan").unwrap(), ColorRyDit::Cyan);
assert_eq!(ColorRyDit::from_str("magenta").unwrap(), ColorRyDit::Magenta);
}
#[test]
fn test_colores_constantes() {
assert_eq!(RED.r, 230); assert_eq!(RED.g, 41); assert_eq!(RED.b, 55);
assert_eq!(GREEN.r, 117); assert_eq!(GREEN.g, 203); assert_eq!(GREEN.b, 100);
assert_eq!(BLUE.r, 51); assert_eq!(BLUE.g, 122); assert_eq!(BLUE.b, 206);
assert_eq!(WHITE.r, 255); assert_eq!(WHITE.g, 255); assert_eq!(WHITE.b, 255);
assert_eq!(BLACK.r, 0); assert_eq!(BLACK.g, 0); assert_eq!(BLACK.b, 0);
}
#[test]
fn test_color_to_color() {
assert_eq!(ColorRyDit::Rojo.to_color().r, 230);
assert_eq!(ColorRyDit::Verde.to_color().r, 117);
assert_eq!(ColorRyDit::Azul.to_color().r, 51);
}
#[test]
fn test_color_desconocido_retorna_negro() {
assert_eq!(ColorRyDit::from_str("color_raro").unwrap(), ColorRyDit::Negro);
assert_eq!(ColorRyDit::from_str("").unwrap(), ColorRyDit::Negro);
}
}
}