Skip to main content

zerodds_rpc/
request_identity.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! Request-Identity-Propagation (Spec §7.8.2.x).
5//!
6//! Service- und Client-Side koennen die Identitaet eines Requests
7//! abfragen via `get_request_identity()`. Wir liefern das via
8//! [`RequestIdentity`]-Struct, das vom Replier/Requester-Pfad
9//! gefuellt wird.
10//!
11//! # Spec-Mapping
12//!
13//! * **§7.8.2.1** Service-Side `get_request_identity()` —
14//!   `current_request_identity` (siehe Replier-Modul) auf Replier-Seite.
15//! * **§7.8.2.2** Client-Side `get_request_identity()` —
16//!   `RequesterEndpoint`-Pfad.
17//! * **§7.8.2.3** Propagation via Inline-QoS
18//!   (`PID_RELATED_SAMPLE_IDENTITY`) — siehe `zerodds-rtps`-Wire-Pfad.
19
20extern crate alloc;
21
22use crate::common_types::SampleIdentity;
23
24/// Spec §7.8.2.1 + §7.8.2.2: Identitaet eines aktiven Requests.
25#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
26pub struct RequestIdentity {
27    /// SampleIdentity des Requests.
28    pub sample_identity: SampleIdentity,
29    /// `true` wenn die Identitaet via Inline-QoS propagiert wurde
30    /// (Spec §7.8.2.3); `false` bei Header-basierter Propagation.
31    pub via_inline_qos: bool,
32}
33
34impl RequestIdentity {
35    /// Konstruktor fuer Header-basierte Propagation.
36    #[must_use]
37    pub fn from_header(sample_identity: SampleIdentity) -> Self {
38        Self {
39            sample_identity,
40            via_inline_qos: false,
41        }
42    }
43
44    /// Konstruktor fuer Inline-QoS-basierte Propagation.
45    #[must_use]
46    pub fn from_inline_qos(sample_identity: SampleIdentity) -> Self {
47        Self {
48            sample_identity,
49            via_inline_qos: true,
50        }
51    }
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57
58    #[test]
59    fn from_header_marks_explicit_propagation() {
60        let id = SampleIdentity::default();
61        let r = RequestIdentity::from_header(id);
62        assert!(!r.via_inline_qos);
63        assert_eq!(r.sample_identity, id);
64    }
65
66    #[test]
67    fn from_inline_qos_marks_implicit_propagation() {
68        let id = SampleIdentity::default();
69        let r = RequestIdentity::from_inline_qos(id);
70        assert!(r.via_inline_qos);
71        assert_eq!(r.sample_identity, id);
72    }
73
74    #[test]
75    fn default_is_header_based_with_zero_identity() {
76        let r = RequestIdentity::default();
77        assert!(!r.via_inline_qos);
78    }
79}