use serde_json;
use serde_json::json;
use std::marker::{Send, Sync};
use super::utils::timestamp;
pub trait Event: Send + Sync {
fn as_event_description(&self) -> serde_json::Map<String, serde_json::Value> {
let mut description = serde_json::Map::new();
let mut inner = serde_json::Map::new();
inner.insert("timestamp".to_string(), json!(self.get_time()));
let data = self.get_data();
if data.is_some() {
inner.insert("data".to_string(), json!(data));
}
description.insert(self.get_name(), json!(inner));
description
}
fn get_name(&self) -> String;
fn get_data(&self) -> Option<serde_json::Value>;
fn get_time(&self) -> String;
}
pub struct BaseEvent {
name: String,
data: Option<serde_json::Value>,
time: String,
}
impl BaseEvent {
pub fn new(name: String, data: Option<serde_json::Value>) -> Self {
Self {
name,
data,
time: timestamp(),
}
}
}
impl Event for BaseEvent {
fn get_name(&self) -> String {
self.name.clone()
}
fn get_data(&self) -> Option<serde_json::Value> {
self.data.clone()
}
fn get_time(&self) -> String {
self.time.clone()
}
}