zerodds_security/data_tagging.rs
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! Data-Tagging-Plugin SPI (OMG DDS-Security 1.1 §8.7).
5//!
6//! Optional-Plugin fuer Application-Level-Labels (Classification-
7//! Marker, Data-Sensitivity, etc.). Wird an jeden DataWriter/Reader
8//! mitgeliefert und auf dem Wire via `DataTags`-Submessage propagiert.
9//!
10//! In v1.3 nur als Trait-Interface — produktive Nutzung kommt erst
11//! mit NGVA/FACE-Integration in v2.0.
12//!
13//! zerodds-lint: allow no_dyn_in_safe
14//! (Plugin-SPI benötigt `Box<dyn DataTaggingPlugin>`.)
15
16extern crate alloc;
17
18use alloc::boxed::Box;
19use alloc::string::String;
20use alloc::vec::Vec;
21
22/// Ein Tag = Name + Value-Paar (vergleichbar mit [`crate::Property`],
23/// aber auf Application-Data-Level, nicht auf Participant-Config-Level).
24#[derive(Debug, Clone, PartialEq, Eq)]
25pub struct DataTag {
26 /// Tag-Name.
27 pub name: String,
28 /// Tag-Value.
29 pub value: String,
30}
31
32/// Data-Tagging-Plugin (Spec §8.7.2).
33pub trait DataTaggingPlugin: Send + Sync {
34 /// Tags an einen Endpoint (DataWriter/Reader) anhaengen. Die Tags
35 /// werden via SEDP an Remote-Participants propagiert.
36 fn set_tags(&mut self, endpoint_guid: [u8; 16], tags: Vec<DataTag>);
37
38 /// Tags eines Endpoints abfragen.
39 fn get_tags(&self, endpoint_guid: [u8; 16]) -> Vec<DataTag>;
40
41 /// Plugin-Class-Id.
42 fn plugin_class_id(&self) -> &str;
43}
44
45/// Factory-Alias.
46pub type DataTaggingBox = Box<dyn DataTaggingPlugin>;