awtrix3 0.0.2

Awtrix3 types and API (mqtt/http), from https://blueforcer.github.io/awtrix3/#/api
Documentation
use serde::{ser::SerializeTuple, Deserialize, Serialize};

/// Color.
#[derive(Debug, Deserialize)]
pub enum Color {
    Single(u8),
    Rgb(u8, u8, u8),
    Hex(u32),
    Black,
    Red,
    Green,
    Blue,
    Yellow,
    Orange,
}

impl Color {
    pub fn to_rgb(&self) -> [u8; 3] {
        match self {
            Color::Single(c) => [*c; 3],
            Color::Rgb(r, g, b) => [*r, *g, *b],
            Color::Hex(h) => {
                let r = (h >> 16) as u8;
                let g = ((h >> 8) & 0xff) as u8;
                let b = (h & 0xff) as u8;
                [r, g, b]
            }
            Color::Black => [0, 0, 0],
            Color::Red => [255, 0, 0],
            Color::Green => [0, 255, 0],
            Color::Blue => [0, 0, 255],
            Color::Yellow => [255, 255, 0],
            Color::Orange => [255, 165, 0],
        }
    }
}

impl Serialize for Color {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        let rgb = self.to_rgb();
        let mut seq = serializer.serialize_tuple(3)?;
        seq.serialize_element(&rgb[0])?;
        seq.serialize_element(&rgb[1])?;
        seq.serialize_element(&rgb[2])?;
        seq.end()
    }
}