Skip to main content

Module codegen

Module codegen 

Source
Expand description

Request/Reply-Codegen-Datenmodell — Spec §7.5.1.

Diese Stufe (C6.1.B) leitet aus einer ServiceDef die Wire-Datenmodelle der Request- und Reply-Topics ab. Die Spec unterscheidet zwei Layouts:

  • Basic-Service (Spec §7.5.1.1): ein Request-Topic + ein Reply- Topic pro Service-Type, beide mit einer ungetypten Discriminated-Union ueber alle Methoden. Wire-Form:

    struct <Service>_Request {
        RequestHeader header;
        union <Service>_Call switch (long _d) {
            case OP_<m1>: <Service>_<m1>_In   m1_args;
            case OP_<m2>: <Service>_<m2>_In   m2_args;
            ...
        };
    };

    <Service>_Reply analog mit <Service>_<m>_Out und ReplyHeader.

  • Enhanced-Service (Spec §7.5.1.2): pro Methode ein eigenes Request- und Reply-Topic mit typisierten Pro-Methode-Strukturen. Wire-Form (pro Methode):

    struct <Service>_<m>_In  { /* in/inout-Params */ };
    struct <Service>_<m>_Out { /* return + out/inout */ };

Wir erzeugen hier Daten-Strukturen (RequestType, ReplyType) mit Member-Listen — kein Sprach-Codegen. Die Sprach-Backends in crates/idl-cpp, idl-csharp und idl-java konsumieren das Modell und emittieren Bindings.

Oneway-Methoden:

  • Im Basic-Layout taucht eine Oneway-Methode im Request-Union auf, wird aber nicht ins Reply-Union aufgenommen — der Reply-Topic wird trotzdem gemeinsam genutzt.
  • Im Enhanced-Layout liefert build_enhanced_pair fuer eine Oneway-Methode Some(RequestType) und None als Reply (siehe MethodPair).

Structs§

CallUnionCase
Discriminator-Case einer Call-Union (Basic-Layout).
CallUnionDef
<Service>_Call (Request) bzw. <Service>_Result (Reply) Union.
MethodPair
Pair fuer eine Enhanced-Methode. Reply ist None bei oneway.
ReplyType
Reply-Wire-Datenmodell. Analog zu RequestType.
RequestType
Request-Wire-Datenmodell.
StructMember
Member einer generierten Wire-Struktur.

Enums§

MemberType
Typ eines Struct-Members. Entweder ein bekannter RPC-Header-Typ (RequestHeader/ReplyHeader/<Service>_Call) oder ein IDL-Typ aus zerodds_idl::ast::TypeSpec.
ServiceLayout
Layout-Variante des Service-Wire-Modells (Spec §7.5.1).

Functions§

build_basic_pair
Liefert die Datenmodelle der Basic-Layout-Topics (<Service>_Request plus <Service>_Reply). Ein leerer ServiceDef liefert ein Pair mit leeren Unions — der Caller muss selbst entscheiden, ob er das verwirft.
build_enhanced_all
Liefert alle Enhanced-Layout-Pairs eines Service.
build_enhanced_pair
Liefert das Pro-Methode-Pair (Request + optional Reply).