use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::Metadata;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct AgentEvent {
pub kind: String,
#[serde(default)]
pub payload: Value,
#[serde(default, skip_serializing_if = "Metadata::is_empty")]
pub metadata: Metadata,
}
impl AgentEvent {
#[must_use]
pub fn new(kind: impl Into<String>, payload: Value) -> Self {
Self {
kind: kind.into(),
payload,
metadata: Metadata::default(),
}
}
#[must_use]
pub fn with_metadata(mut self, metadata: Metadata) -> Self {
self.metadata = metadata;
self
}
}
pub const TASK_SNAPSHOT_EVENT_KIND: &str = "task_snapshot";