hass_rs/types/
events.rs

1use crate::types::{Context, HassEntity};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use std::{collections::HashMap, fmt};
5
6/// This object represents the Home Assistant Event
7///
8/// received when the client is subscribed to
9/// [Subscribe to events](https://developers.home-assistant.io/docs/api/websocket/#subscribe-to-events)
10///
11/// This is created against StateChangedEvent, may not work with other event types, although
12/// extra fields are supported, so with some work it could be used for other events
13#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
14pub struct HassEvent {
15    pub data: EventData,
16    pub event_type: String,
17    pub time_fired: String,
18    pub origin: String,
19    pub context: Context,
20}
21
22/// This is part of HassEvent
23#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
24pub struct EventData {
25    pub entity_id: Option<String>,
26    pub new_state: Option<HassEntity>,
27    pub old_state: Option<HassEntity>,
28    #[serde(flatten)]
29    pub extra: HashMap<String, Value>,
30}
31
32impl fmt::Display for HassEvent {
33    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34        write!(f, "HassEvent {{\n")?;
35        write!(f, "  event_type: {},\n", self.event_type)?;
36        write!(f, "  data: {{\n")?;
37        write!(f, "    entity_id: {:?},\n", self.data.entity_id)?;
38        write!(f, "    new_state: {:?},\n", self.data.new_state)?;
39        write!(f, "    old_state: {:?},\n", self.data.old_state)?;
40        write!(f, "  }},\n")?;
41        write!(f, "  origin: {},\n", self.origin)?;
42        write!(f, "  time_fired: {},\n", self.time_fired)?;
43        write!(f, "  context: {:?},\n", self.context)?;
44        write!(f, "}}")?;
45        Ok(())
46    }
47}