Skip to main content

dataplane_sdk/core/model/
messages.rs

1//  Copyright (c) 2026 Metaform Systems, Inc
2//
3//  This program and the accompanying materials are made available under the
4//  terms of the Apache License, Version 2.0 which is available at
5//  https://www.apache.org/licenses/LICENSE-2.0
6//
7//    SPDX-License-Identifier: Apache-2.0
8//
9//    Contributors:
10//         Metaform Systems, Inc. - initial API and implementation
11//
12
13use std::collections::HashMap;
14
15use bon::Builder;
16use serde::{Deserialize, Serialize};
17use serde_json::Value;
18
19use super::{data_address::DataAddress, data_flow::DataFlowState};
20
21#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
22#[serde(rename_all = "camelCase")]
23#[builder(on(String, into))]
24pub struct DataFlowStartMessage {
25    pub message_id: String,
26    pub participant_id: String,
27    pub counter_party_id: String,
28    pub dataspace_context: String,
29    pub process_id: String,
30    pub agreement_id: String,
31    pub dataset_id: String,
32    pub profile: String,
33    pub data_address: Option<DataAddress>,
34    #[builder(default)]
35    #[serde(default)]
36    pub labels: Vec<String>,
37    #[builder(default)]
38    #[serde(default)]
39    pub metadata: HashMap<String, Value>,
40    #[builder(default)]
41    #[serde(default)]
42    pub claims: HashMap<String, Value>,
43}
44
45#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
46#[serde(rename_all = "camelCase")]
47#[builder(on(String, into))]
48pub struct DataFlowResumeMessage {
49    pub data_address: Option<DataAddress>,
50}
51
52#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
53#[serde(rename_all = "camelCase")]
54#[builder(on(String, into))]
55pub struct DataFlowPrepareMessage {
56    pub message_id: String,
57    pub participant_id: String,
58    pub counter_party_id: String,
59    pub dataspace_context: String,
60    pub process_id: String,
61    pub agreement_id: String,
62    pub dataset_id: String,
63    pub profile: String,
64    #[builder(default)]
65    #[serde(default)]
66    pub labels: Vec<String>,
67    #[builder(default)]
68    #[serde(default)]
69    pub metadata: HashMap<String, Value>,
70    #[builder(default)]
71    #[serde(default)]
72    pub claims: HashMap<String, Value>,
73}
74
75#[derive(Debug, Builder, Serialize, Deserialize, Clone)]
76#[serde(rename_all = "camelCase")]
77#[builder(on(String, into))]
78pub struct DataFlowStatusMessage {
79    #[builder(default = new_message_id())]
80    #[serde(default = "new_message_id")]
81    pub message_id: String,
82    pub data_flow_id: String,
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub data_address: Option<DataAddress>,
85    pub state: DataFlowState,
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub error: Option<String>,
88}
89
90fn new_message_id() -> String {
91    uuid::Uuid::new_v4().to_string()
92}
93
94#[derive(Debug, Builder, Serialize, Deserialize, Clone)]
95#[serde(rename_all = "camelCase")]
96pub struct DataFlowStartedNotificationMessage {
97    pub data_address: Option<DataAddress>,
98}
99
100#[derive(Builder, Debug, Serialize, Deserialize, Clone)]
101#[serde(rename_all = "camelCase")]
102#[builder(on(String, into))]
103pub struct DataFlowStatusResponseMessage {
104    pub data_flow_id: String,
105    pub state: DataFlowState,
106}
107
108#[derive(Debug, Serialize, Deserialize, Clone)]
109#[serde(rename_all = "camelCase")]
110pub struct DataFlowSuspendMessage {
111    pub reason: Option<String>,
112}
113
114#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
115#[serde(rename_all = "camelCase")]
116#[builder(on(String, into))]
117pub struct DataFlowTerminateMessage {
118    pub reason: Option<String>,
119}