Files
hemma/common/src/lib.rs
2022-10-24 22:20:55 +02:00

81 lines
1.7 KiB
Rust

use std::collections::HashMap;
use chrono::{NaiveTime, Weekday};
use lighter_lib::{BulbColor, BulbId, BulbMode};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
#[non_exhaustive]
pub enum ServerMessage {
InfoPage {
html: String,
},
/// Update the state of a bulb
BulbState {
id: BulbId,
mode: BulbMode,
wake_schedule: HashMap<Weekday, NaiveTime>,
},
BulbMap(BulbMap),
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[non_exhaustive]
pub enum ClientMessage {
//SubscribeToInfo,
//SubscribeToBulbs,
GetBulbs,
SetBulbColor {
id: BulbId,
color: BulbColor,
},
SetBulbPower {
id: BulbId,
power: bool,
},
SetBulbWakeTime {
id: BulbId,
day: Weekday,
time: Option<NaiveTime>,
},
}
/// A geometric description of rooms/groups of light bulbs
#[derive(Default, Deserialize, Serialize, Debug, Clone)]
pub struct BulbMap {
pub groups: Vec<BulbGroup>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct BulbGroup {
pub name: String,
pub bulbs: Vec<BulbId>,
pub x: u32,
pub y: u32,
pub shape: BulbGroupShape,
}
#[derive(Deserialize, Serialize, Debug, Clone, Copy)]
pub enum BulbGroupShape {
Circle { r: u32 },
Rectangle { w: u32, h: u32 },
}
impl BulbGroupShape {
pub fn height(&self) -> u32 {
match *self {
Self::Circle { r } => r,
Self::Rectangle { h, .. } => h,
}
}
pub fn width(&self) -> u32 {
match *self {
Self::Circle { r } => r,
Self::Rectangle { w, .. } => w,
}
}
}