Skip to main content

zerodds_qos/policies/
entity_factory.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3//! EntityFactoryQosPolicy (DDS 1.4 §2.2.3.27).
4//!
5//! Wire-Format: bool (1 byte + 3 pad = 4 byte). Lokale Policy; wird
6//! normalerweise nicht ueber Wire propagiert, nur der Vollstaendigkeit
7//! halber implementiert.
8
9use zerodds_cdr::{BufferReader, BufferWriter, DecodeError, EncodeError};
10
11use crate::wire_helpers::{read_bool_padded, write_bool_padded};
12
13/// EntityFactoryQosPolicy.
14#[derive(Debug, Clone, Copy, PartialEq, Eq)]
15pub struct EntityFactoryQosPolicy {
16    /// Entities werden bei Erzeugung automatisch enabled. Default: `true`.
17    pub autoenable_created_entities: bool,
18}
19
20impl Default for EntityFactoryQosPolicy {
21    fn default() -> Self {
22        Self {
23            autoenable_created_entities: true,
24        }
25    }
26}
27
28impl EntityFactoryQosPolicy {
29    /// Wire-Encoding.
30    ///
31    /// # Errors
32    /// Buffer-Overflow.
33    pub fn encode_into(self, w: &mut BufferWriter) -> Result<(), EncodeError> {
34        write_bool_padded(w, self.autoenable_created_entities)
35    }
36
37    /// Wire-Decoding.
38    ///
39    /// # Errors
40    /// Buffer-Underflow.
41    pub fn decode_from(r: &mut BufferReader<'_>) -> Result<Self, DecodeError> {
42        Ok(Self {
43            autoenable_created_entities: read_bool_padded(r)?,
44        })
45    }
46}
47
48#[cfg(test)]
49#[allow(clippy::unwrap_used)]
50mod tests {
51    use super::*;
52    use zerodds_cdr::Endianness;
53
54    #[test]
55    fn default_is_true() {
56        assert!(EntityFactoryQosPolicy::default().autoenable_created_entities);
57    }
58
59    #[test]
60    fn roundtrip() {
61        for v in [true, false] {
62            let p = EntityFactoryQosPolicy {
63                autoenable_created_entities: v,
64            };
65            let mut w = BufferWriter::new(Endianness::Little);
66            p.encode_into(&mut w).unwrap();
67            let bytes = w.into_bytes();
68            let mut r = BufferReader::new(&bytes, Endianness::Little);
69            assert_eq!(EntityFactoryQosPolicy::decode_from(&mut r).unwrap(), p);
70        }
71    }
72}