use crate::{HatId, Topic};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Event {
pub topic: Topic,
pub payload: String,
pub source: Option<HatId>,
pub target: Option<HatId>,
}
impl Event {
pub fn new(topic: impl Into<Topic>, payload: impl Into<String>) -> Self {
Self {
topic: topic.into(),
payload: payload.into(),
source: None,
target: None,
}
}
#[must_use]
pub fn with_source(mut self, source: impl Into<HatId>) -> Self {
self.source = Some(source.into());
self
}
#[must_use]
pub fn with_target(mut self, target: impl Into<HatId>) -> Self {
self.target = Some(target.into());
self
}
}