Skip to main content

DdsType

Trait DdsType 

Source
pub trait DdsType: Sized {
    const TYPE_NAME: &'static str;
    const EXTENSIBILITY: Extensibility = Extensibility::Final;
    const HAS_KEY: bool = false;
    const IS_KEYED: bool = Self::HAS_KEY;
    const KEY_HOLDER_MAX_SIZE: Option<usize> = None;
    const IS_NESTED: bool = false;
    const TYPE_IDENTIFIER: TypeIdentifier = zerodds_types::TypeIdentifier::None;

    // Required methods
    fn encode(&self, out: &mut Vec<u8>) -> Result<(), EncodeError>;
    fn decode(bytes: &[u8]) -> Result<Self, DecodeError>;

    // Provided methods
    fn encode_be(&self, out: &mut Vec<u8>) -> Result<(), EncodeError> { ... }
    fn encode_key_holder_be(&self, _holder: &mut PlainCdr2BeKeyHolder) { ... }
    fn field_value(&self, _path: &str) -> Option<Value> { ... }
    fn compute_key_hash(&self) -> Option<[u8; 16]> { ... }
    fn key_hash(&self) -> Option<[u8; 16]> { ... }
}
Expand description

Typ, der via DDS published/subscribed werden kann.

Required Associated Constants§

Source

const TYPE_NAME: &'static str

Vollqualifizierter Topic-Type-Name (z.B. "std_msgs::String"). Muss exakt zum Peer-Type-Namen passen (strict matching).

Provided Associated Constants§

Source

const EXTENSIBILITY: Extensibility = Extensibility::Final

XTypes 1.3 §7.4.5 Struct-Extensibility-Kind. Default Final fuer Backwards-Kompat zu pre-EXTENSIBILITY-Codegen-Outputs. Spec: zerodds-xcdr2-rust §2.3.

Source

const HAS_KEY: bool = false

true wenn der Topic-Type keyed ist (mindestens ein Member mit @key-Annotation). Default false — Caller (proc-macro) ueberschreibt fuer keyed Types und implementiert auch Self::encode_key_holder_be.

Spec: XTypes 1.3 §7.6.8 (KeyHash-Pflicht fuer keyed Topics).

Hinweis (zerodds-xcdr2-rust §11 Errata): die Spec referenziert dieses Feld als IS_KEYED. Wir behalten HAS_KEY fuer Source-Kompat zu Pre-1.0 Code; der spec-aligned Alias Self::IS_KEYED gibt jederzeit denselben Wert.

Source

const IS_KEYED: bool = Self::HAS_KEY

Spec-aligned Alias fuer Self::HAS_KEY. zerodds-xcdr2-rust §2 referenziert das als IS_KEYED.

Source

const KEY_HOLDER_MAX_SIZE: Option<usize> = None

Maximale Groesse des PLAIN_CDR2-BE-KeyHolder-Streams in Bytes (XTypes 1.3 §7.6.8.4 Step 5). None = nicht keyed oder unbounded (MD5-Pfad). Some(n) mit n <= 16 = zero-pad-Pfad.

Source

const IS_NESTED: bool = false

true wenn der Type mit @nested annotiert ist (XTypes 1.3 §7.4.6.3.5). Nested-Types sind nur als Member anderer Types gedacht und MUESSEN nicht als DDS-Topic-Type registriert werden. DomainParticipant::create_topic lehnt registration von nested-Types mit PreconditionNotMet ab.

Source

const TYPE_IDENTIFIER: TypeIdentifier = zerodds_types::TypeIdentifier::None

XTypes 1.3 §7.3.4.2 — TypeIdentifier des Types fuer XTypes-aware Discovery + Compatibility-Matching. Default TypeIdentifier::None signalisiert “type-id nicht bereitgestellt; Reader-Writer-Match faellt zurueck auf reinen type_name-Vergleich (DDS 1.4 §2.2.3 Default-Path)”.

idl-rust Codegen emittiert hier den passenden TypeIdentifier:

  • Primitive int32TypeIdentifier::Primitive(PrimitiveKind::Int32),
  • String string<N>TypeIdentifier::String8Small{ bound },
  • Composite struct → TypeIdentifier::EquivalenceHash (sobald die TypeRegistry-Lookup live ist).

Sobald beide Seiten (Writer + Reader) einen TypeIdentifier liefern, ruft der Subscriber-Match-Pfad zerodds_types::type_matcher::TypeMatcher::match_types auf (XTypes §7.6.3.7 + DDS 1.4 §2.2.3 TypeConsistencyEnforcement).

Required Methods§

Source

fn encode(&self, out: &mut Vec<u8>) -> Result<(), EncodeError>

Serialisiert self in den XCDR2-Payload, der in einer DATA-Submessage als serialized_payload gesendet wird. Default-Endianness: Little-Endian (RTPS 2.5 §10.5 RepresentationIdentifier = CDR2_LE = 0x0010).

§Errors

CDR-Encoder-Fehler (Buffer-Overflow etc.).

Source

fn decode(bytes: &[u8]) -> Result<Self, DecodeError>

Deserialisiert einen XCDR2-Payload. Der Caller stellt sicher, dass bytes den vollen Sample-Payload enthaelt.

§Errors

CDR-Decoder-Fehler (Truncation, unerwartete Bytes, etc.).

Provided Methods§

Source

fn encode_be(&self, out: &mut Vec<u8>) -> Result<(), EncodeError>

Big-Endian-Variante von Self::encode. Default-Implementation delegiert auf Self::encode (kein Byte-Swap), da generischer BE-Re-Encode ohne Type-Reflection nicht moeglich ist. Codegen ueberschreibt das fuer Strukturen, die echt BE auf die Wire gehen sollen. Spec: zerodds-xcdr2-rust §2.4.

§Errors

CDR-Encoder-Fehler.

Source

fn encode_key_holder_be(&self, _holder: &mut PlainCdr2BeKeyHolder)

Serialisiert die @key-Member-Werte im PLAIN_CDR2-BE-Format in den uebergebenen PlainCdr2BeKeyHolder. Reihenfolge: nach member_id aufsteigend (XTypes 1.3 §7.6.8.3.1.b).

Default-Implementation: leerer Schreibvorgang. Keyed Types MUESSEN das ueberschreiben.

Wird vom DcpsRuntime im Sample-Encode-Pfad aufgerufen, um PID_KEY_HASH in die Inline-QoS zu schreiben.

Source

fn field_value(&self, _path: &str) -> Option<Value>

Liefert den Wert eines Feldpfads (dotted, z.B. "a.b") als zerodds_sql_filter::Value fuer SQL-Filter-Evaluation in QueryCondition / ContentFilteredTopic. Default: None (kein Feld erreichbar — der Filter denied dann jedes Sample, sofern es einen Feldzugriff enthaelt).

Spec: DDS 1.4 §B.2.1 (Filter Expressions) iVm. §2.2.2.5.9 (QueryCondition) und §2.2.2.3.5 (ContentFilteredTopic). Generierte IDL-Stubs ueberschreiben das per Field.

Source

fn compute_key_hash(&self) -> Option<[u8; 16]>

Berechnet den 16-Byte KeyHash dieser Instanz nach XTypes 1.3 §7.6.8.4. None wenn HAS_KEY = false.

Default-Implementation nutzt Self::encode_key_holder_be + Self::KEY_HOLDER_MAX_SIZE und delegiert an compute_key_hash.

Source

fn key_hash(&self) -> Option<[u8; 16]>

Spec-aligned Alias fuer Self::compute_key_hash. zerodds-xcdr2-rust §2.5 nutzt den Namen key_hash; der Implementations-Name behaelt compute_key_hash aus historischer Kompat. Beide liefern denselben Wert.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl DdsType for ParticipantBuiltinTopicData

Source§

const TYPE_NAME: &'static str = "DDS::ParticipantBuiltinTopicData"

Source§

const HAS_KEY: bool = true

Source§

const KEY_HOLDER_MAX_SIZE: Option<usize>

Source§

impl DdsType for PublicationBuiltinTopicData

Source§

const TYPE_NAME: &'static str = "DDS::PublicationBuiltinTopicData"

Source§

const HAS_KEY: bool = true

Source§

const KEY_HOLDER_MAX_SIZE: Option<usize>

Source§

impl DdsType for SubscriptionBuiltinTopicData

Source§

const TYPE_NAME: &'static str = "DDS::SubscriptionBuiltinTopicData"

Source§

const HAS_KEY: bool = true

Source§

const KEY_HOLDER_MAX_SIZE: Option<usize>

Source§

impl DdsType for TopicBuiltinTopicData

Source§

const TYPE_NAME: &'static str = "DDS::TopicBuiltinTopicData"

Source§

const HAS_KEY: bool = true

Source§

const KEY_HOLDER_MAX_SIZE: Option<usize>

Source§

impl DdsType for RawBytes

Source§

const TYPE_NAME: &'static str = "zerodds::RawBytes"

Source§

impl DdsType for ShapeType

Source§

const TYPE_NAME: &'static str = "ShapeType"

Source§

const HAS_KEY: bool = true