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.

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 are PascalCase; [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_import writes the import of the data types that idlc generate --lang typescript produced.

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 (subcommand idlc dlrl, --lang for the four languages).

Features

  • std (default) — enables zerodds-dlrl/std. Without it the crate is no_std with alloc.

Status

  • no_std with alloc unless std is 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.

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 sind PascalCase; [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_import schreibt den import der Datentypen, die idlc generate --lang typescript erzeugt 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 (Unterbefehl idlc dlrl, --lang für die vier Sprachen).

Features

  • std (Standard) — aktiviert zerodds-dlrl/std. Ohne dieses Feature ist das Crate no_std mit alloc.

Status

  • no_std mit alloc, solange std nicht aktiviert ist.
  • forbid(unsafe_code).
  • Nur Bibliothek, keine Binaries. Eine Abhängigkeit: zerodds-dlrl (Default-Features abgeschaltet).
  • 9 Testfunktionen im Quelltext (src/).