use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OrchestrationContext {
pub session_id: Uuid,
pub initiator: String,
pub environment: String,
pub correlation_id: Option<Uuid>,
pub metadata: HashMap<String, serde_json::Value>,
pub started_at: DateTime<Utc>,
}
impl OrchestrationContext {
pub fn new(initiator: String, environment: String) -> Self {
Self {
session_id: Uuid::new_v4(),
initiator,
environment,
correlation_id: None,
metadata: HashMap::new(),
started_at: Utc::now(),
}
}
pub fn with_correlation(mut self, correlation_id: Uuid) -> Self {
self.correlation_id = Some(correlation_id);
self
}
pub fn add_metadata<T: Serialize>(
&mut self,
key: String,
value: T,
) -> Result<(), serde_json::Error> {
let json_value = serde_json::to_value(value)?;
self.metadata.insert(key, json_value);
Ok(())
}
}