dataplane-sdk 0.1.1

A Rust SDK for building data planes that interface with Dataspace Protocol Control Planes via the Data Plane Signaling API
Documentation
//  Copyright (c) 2026 Metaform Systems, Inc
//
//  This program and the accompanying materials are made available under the
//  terms of the Apache License, Version 2.0 which is available at
//  https://www.apache.org/licenses/LICENSE-2.0
//
//    SPDX-License-Identifier: Apache-2.0
//
//    Contributors:
//         Metaform Systems, Inc. - initial API and implementation
//

use std::collections::HashMap;

use bon::Builder;
use serde::{Deserialize, Serialize};
use serde_json::Value;

use super::{data_address::DataAddress, data_flow::DataFlowState};

#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(on(String, into))]
pub struct DataFlowStartMessage {
    pub message_id: String,
    pub participant_id: String,
    pub counter_party_id: String,
    pub dataspace_context: String,
    pub process_id: String,
    pub agreement_id: String,
    pub dataset_id: String,
    pub profile: String,
    pub data_address: Option<DataAddress>,
    #[builder(default)]
    #[serde(default)]
    pub labels: Vec<String>,
    #[builder(default)]
    #[serde(default)]
    pub metadata: HashMap<String, Value>,
    #[builder(default)]
    #[serde(default)]
    pub claims: HashMap<String, Value>,
}

#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(on(String, into))]
pub struct DataFlowResumeMessage {
    pub data_address: Option<DataAddress>,
}

#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(on(String, into))]
pub struct DataFlowPrepareMessage {
    pub message_id: String,
    pub participant_id: String,
    pub counter_party_id: String,
    pub dataspace_context: String,
    pub process_id: String,
    pub agreement_id: String,
    pub dataset_id: String,
    pub profile: String,
    #[builder(default)]
    #[serde(default)]
    pub labels: Vec<String>,
    #[builder(default)]
    #[serde(default)]
    pub metadata: HashMap<String, Value>,
    #[builder(default)]
    #[serde(default)]
    pub claims: HashMap<String, Value>,
}

#[derive(Debug, Builder, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
#[builder(on(String, into))]
pub struct DataFlowStatusMessage {
    #[builder(default = new_message_id())]
    #[serde(default = "new_message_id")]
    pub message_id: String,
    pub data_flow_id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data_address: Option<DataAddress>,
    pub state: DataFlowState,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub error: Option<String>,
}

fn new_message_id() -> String {
    uuid::Uuid::new_v4().to_string()
}

#[derive(Debug, Builder, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct DataFlowStartedNotificationMessage {
    pub data_address: Option<DataAddress>,
}

#[derive(Builder, Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
#[builder(on(String, into))]
pub struct DataFlowStatusResponseMessage {
    pub data_flow_id: String,
    pub state: DataFlowState,
}

#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct DataFlowSuspendMessage {
    pub reason: Option<String>,
}

#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(on(String, into))]
pub struct DataFlowTerminateMessage {
    pub reason: Option<String>,
}