zerodds-dlrl-codegen
DLRL profile. Code generation for DDS 1.4 Annex B.4: object and home classes for C++, Java, C# and TypeScript from the DLRL pragmas.
- Source: crates/dlrl-codegen
- API docs: docs.rs/zerodds-dlrl-codegen
zerodds-dlrl-codegen turns the three DLRL pragmas DCPS_DATA_TYPE,
DCPS_DATA_KEY and DCPS_DLRL_RELATION, as parsed by
zerodds-dlrl, into the classes an application writes against.
collect_type_infos groups the pragmas into one DlrlTypeInfo per type.
Each backend emits one object class per data type, with a getter per key field, a getter and a
setter per mono-valued attribute, a collection accessor per multi-valued attribute and an accessor
per relation. For C++, Java and C# a home class (factory and registry of its object class, §B.7) is generated as well. The output is text, not a zerodds-lang-cst tree: a
DLRL object class is not on a wire, and two of the four targets (C#, TypeScript) have no
lang-cst dialect.
- C++ — DDS 1.4 §B.6/§B.7, the PSM of the specification:
generate_cpp_object,generate_cpp_home. - Java — DDS 1.4 §B.8:
generate_java_object,generate_java_home. - C# — no OMG PSM exists; the output follows the Java shape and the generated file says so:
generate_csharp_object,generate_csharp_home. Properties arePascalCase;[DlrlKey("venue")]keeps the IDL key name. - TypeScript — no OMG PSM exists; an interface plus a class implementing it:
generate_ts_interface,generate_ts_class;generate_ts_importwrites theimportof the data types thatidlc generate --lang typescriptproduced.
The generated C++, Java and C# classes derive from DLRL base types (DLRL::ObjectRoot,
org.omg.dds.dlrl.ObjectRoot, an ObjectRoot/ObjectHome pair for C#)
for which the repository has no runtime; the TypeScript forms name no DLRL base type.
zerodds-idlc documents this and states it in the header of the files it writes.
Spec anchors
- OMG DDS 1.4 Annex B.4 (pragmas), §B.6/§B.7 (C++ PSM), §B.8 (Java PSM).
- OMG DDS 1.2 §8.1.2.2 (types of keys and mono-valued attributes), §8.1.4.2.3 (simple structure).
- OMG IDL 4.2 §7.3.1.2.1.10 (
@default_literal, initial value of enumeration fields in TypeScript). - Coverage: dlrl-1.2.
Consumers
zerodds-idlc(subcommandidlc dlrl,--langfor the four languages).
Features
std(default) — enableszerodds-dlrl/std. Without it the crate isno_stdwithalloc.
Status
no_stdwithallocunlessstdis enabled.forbid(unsafe_code).- Library only, no binaries. One dependency:
zerodds-dlrl(default features off). - 9 test functions in the source (
src/).
zerodds-dlrl-codegen
DLRL-Profil. Codeerzeugung nach DDS 1.4 Annex B.4: Klassen für Objekte und Homes in C++, Java, C# und TypeScript aus den DLRL-Pragmas.
- Quelle: crates/dlrl-codegen
- API-Docs: docs.rs/zerodds-dlrl-codegen
zerodds-dlrl-codegen macht aus den drei DLRL-Pragmas DCPS_DATA_TYPE,
DCPS_DATA_KEY und DCPS_DLRL_RELATION, wie zerodds-dlrl sie
parst, die Klassen, gegen die eine Anwendung programmiert. collect_type_infos fasst die
Pragmas zu einem DlrlTypeInfo je Typ zusammen. Jedes Backend erzeugt eine Objektklasse
je Datentyp, mit einem Getter je Schlüsselfeld, Getter und Setter je einwertigem Attribut, einem
Zugriff auf die Sammlung je mehrwertigem Attribut und einem Zugriff je Beziehung. Für C++, Java und C# entsteht zusätzlich eine Klasse für das Home (Fabrik und Register ihrer Objektklasse, §B.7). Die Ausgabe ist Text, kein Baum aus zerodds-lang-cst: Eine
DLRL-Objektklasse wird nicht übertragen, und zwei der vier Ziele (C#, TypeScript) haben keinen
Dialekt in lang-cst.
- C++ — DDS 1.4 §B.6/§B.7, das PSM der Spezifikation:
generate_cpp_object,generate_cpp_home. - Java — DDS 1.4 §B.8:
generate_java_object,generate_java_home. - C# — es gibt kein OMG-PSM; die Ausgabe folgt der Java-Form, und die erzeugte Datei sagt das:
generate_csharp_object,generate_csharp_home. Properties sindPascalCase;[DlrlKey("venue")]behält den Schlüsselnamen aus der IDL. - TypeScript — es gibt kein OMG-PSM; ein Interface und eine Klasse, die es implementiert:
generate_ts_interface,generate_ts_class;generate_ts_importschreibt denimportder Datentypen, dieidlc generate --lang typescripterzeugt hat.
Die erzeugten Klassen für C++, Java und C# leiten von DLRL-Basistypen ab
(DLRL::ObjectRoot, org.omg.dds.dlrl.ObjectRoot, ein Paar
ObjectRoot/ObjectHome für C#), für die das Repository keine Laufzeit
enthält; die TypeScript-Formen nennen keinen DLRL-Basistyp. zerodds-idlc dokumentiert das
und schreibt es in den Kopf der erzeugten Dateien.
Spec-Anker
- OMG DDS 1.4 Annex B.4 (Pragmas), §B.6/§B.7 (C++-PSM), §B.8 (Java-PSM).
- OMG DDS 1.2 §8.1.2.2 (Typen von Schlüsseln und einwertigen Attributen), §8.1.4.2.3 (einfache Struktur).
- OMG IDL 4.2 §7.3.1.2.1.10 (
@default_literal, Anfangswert von Feldern mit Aufzählungstyp in TypeScript). - Abdeckung: dlrl-1.2.
Konsumenten
zerodds-idlc(Unterbefehlidlc dlrl,--langfür die vier Sprachen).
Features
std(Standard) — aktiviertzerodds-dlrl/std. Ohne dieses Feature ist das Crateno_stdmitalloc.
Status
no_stdmitalloc, solangestdnicht aktiviert ist.forbid(unsafe_code).- Nur Bibliothek, keine Binaries. Eine Abhängigkeit:
zerodds-dlrl(Default-Features abgeschaltet). - 9 Testfunktionen im Quelltext (
src/).