81 lines
1.7 KiB
Rust
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,
|
|
}
|
|
}
|
|
}
|