dataflow_rs/engine/
message.rs

1use crate::engine::error::ErrorInfo;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use uuid::Uuid;
5
6#[derive(Serialize, Deserialize, Debug, Clone)]
7pub struct Message {
8    pub id: String,
9    pub data: Value,
10    pub payload: Value,
11    pub metadata: Value,
12    pub temp_data: Value,
13    pub audit_trail: Vec<AuditTrail>,
14    /// Errors that occurred during message processing
15    pub errors: Vec<ErrorInfo>,
16}
17
18impl Message {
19    pub fn new(payload: &Value) -> Self {
20        Self {
21            id: Uuid::new_v4().to_string(),
22            data: Value::Null,
23            payload: payload.clone(),
24            metadata: Value::Null,
25            temp_data: Value::Null,
26            audit_trail: vec![],
27            errors: vec![],
28        }
29    }
30
31    /// Add an error to the message
32    pub fn add_error(&mut self, error: ErrorInfo) {
33        self.errors.push(error);
34    }
35
36    /// Check if message has errors
37    pub fn has_errors(&self) -> bool {
38        !self.errors.is_empty()
39    }
40}
41
42#[derive(Serialize, Deserialize, Debug, Clone)]
43pub struct AuditTrail {
44    pub workflow_id: String,
45    pub task_id: String,
46    pub timestamp: String,
47    pub changes: Vec<Change>,
48    pub status_code: usize,
49}
50
51#[derive(Serialize, Deserialize, Debug, Clone)]
52pub struct Change {
53    pub path: String,
54    pub old_value: Value,
55    pub new_value: Value,
56}