1use crate::types::{Context, HassEntity};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use std::{collections::HashMap, fmt};
5
6#[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#[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}