use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use tokio::sync::broadcast;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub source: String,
pub timestamp: DateTime<Utc>,
pub topic: String,
pub schema_version: u32,
pub payload: serde_json::Value,
}
impl Message {
pub fn new(
source: impl Into<String>,
topic: impl Into<String>,
schema_version: u32,
payload: serde_json::Value,
) -> Self {
Self {
source: source.into(),
timestamp: Utc::now(),
topic: topic.into(),
schema_version,
payload,
}
}
}
pub trait MessageBroker: Send + Sync {
fn publish(&self, msg: Message) -> usize;
fn subscribe(&self, topic: &str) -> broadcast::Receiver<Message>;
fn close(&self);
}