use super::divoom_dto_common::*;
use rgb::RGB8;
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
use std::fmt;
use std::str::FromStr;
#[derive(Debug, PartialOrd, PartialEq, Copy, Clone)]
pub enum DivoomFontType {
Scrollable,
NotScrollable,
Raw(i32),
}
impl_divoom_dto_enum_traits!(DivoomFontType, Scrollable: "scroll", NotScrollable: "noscroll");
#[derive(Debug, PartialOrd, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct DivoomFontInfo {
pub id: i32,
pub name: String,
pub width: i32,
pub height: i32,
pub charset: String,
pub font_type: DivoomFontType,
}
#[derive(Debug, PartialOrd, PartialEq, Copy, Clone)]
pub enum DivoomTextAnimationScrollDirection {
Left,
Right,
Raw(i32),
}
impl_divoom_dto_enum_traits!(DivoomTextAnimationScrollDirection, Left: "left", Right: "right");
#[derive(Debug, PartialOrd, PartialEq, Copy, Clone)]
pub enum DivoomTextAnimationAlign {
Left,
Middle,
Right,
Raw(i32),
}
impl_divoom_dto_enum_traits!(DivoomTextAnimationAlign, Left: "left", Middle: "middle", Right: "right");
#[derive(Debug, PartialOrd, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct DivoomTextAnimation {
pub text_id: i32,
pub x: i32,
pub y: i32,
pub scroll_direction: DivoomTextAnimationScrollDirection,
pub font_index: i32,
pub text_width: i32,
pub speed_in_ms: i32,
pub text_string: String,
#[serde(deserialize_with = "from_rgb_str")]
#[serde(serialize_with = "to_rgb_str")]
pub color: RGB8,
pub align: DivoomTextAnimationAlign,
}
impl DivoomTextAnimation {
pub fn default() -> DivoomTextAnimation {
DivoomTextAnimation {
text_id: 0,
x: 0,
y: 0,
scroll_direction: DivoomTextAnimationScrollDirection::Left,
font_index: 0,
text_width: 16,
speed_in_ms: 100,
text_string: "".to_string(),
color: rgb::RGB8::new(255, 255, 255),
align: DivoomTextAnimationAlign::Left,
}
}
}