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§
Provided Associated Constants§
Sourceconst EXTENSIBILITY: Extensibility = Extensibility::Final
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.
Sourceconst HAS_KEY: bool = false
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.
Sourceconst IS_KEYED: bool = Self::HAS_KEY
const IS_KEYED: bool = Self::HAS_KEY
Spec-aligned Alias fuer Self::HAS_KEY.
zerodds-xcdr2-rust §2 referenziert das als IS_KEYED.
Sourceconst KEY_HOLDER_MAX_SIZE: Option<usize> = None
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.
Sourceconst IS_NESTED: bool = false
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.
Sourceconst TYPE_IDENTIFIER: TypeIdentifier = zerodds_types::TypeIdentifier::None
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
int32→TypeIdentifier::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§
Sourcefn encode(&self, out: &mut Vec<u8>) -> Result<(), EncodeError>
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.).
Provided Methods§
Sourcefn encode_be(&self, out: &mut Vec<u8>) -> Result<(), EncodeError>
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.
Sourcefn encode_key_holder_be(&self, _holder: &mut PlainCdr2BeKeyHolder)
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.
Sourcefn field_value(&self, _path: &str) -> Option<Value>
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.
Sourcefn compute_key_hash(&self) -> Option<[u8; 16]>
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.
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.