dataflow_rs/engine/
message.rs1use 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 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 pub fn add_error(&mut self, error: ErrorInfo) {
33 self.errors.push(error);
34 }
35
36 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}