zerodds-corba-rust 1.0 — Spec-Coverage

Quelle: docs/specs/zerodds-corba-rust-1.0.md (ZeroDDS Vendor-Spec)

§1 Scope

§1.1 Service-Codegen-Entry

Spec: §1 — Build-Zeit-Tool für CORBA-Service-Konstrukte.

Repo: crates/corba-rust/src/emitter.rs::generate_corba_rust_module.

Tests: crates/corba-rust/tests/snapshot_codegen.rs::snapshot_simple_interface.

Status: done

§2 Type-Mapping

§2.1 DataType-Re-Use

Spec: §2 — DataType-Felder nutzen zerodds-idl-rust::type_map::rust_type_for.

Repo: crates/corba-rust/src/interface_emit.rs::render_params + render_return.

Tests: indirekt via alle Snapshots.

Status: done

§2.2 Object-Reference

Spec: §2 — Objectzerodds_corba_rust::ObjectReference.

Repo: crates/corba-rust/src/runtime.rs::ObjectReference.

Tests: Snapshot zeigt pub object_ref: zerodds_corba_rust::ObjectReference im IStub.

Status: done

§2.3 ValueBase-Trait

Spec: §2 — ValueBasezerodds_corba_rust::ValueBase Trait.

Repo: crates/corba-rust/src/runtime.rs::ValueBase.

Tests: snapshot_valuetype_with_state_member.

Status: done

§2.4 TypeCode

Spec: §2 — TypeCode (CORBA 3.3 §10.7) → Wrapper-Type mit Repository-ID-Lookup.

Repo: crates/corba-rust/src/runtime.rs::TypeCode mit new(repository_id)-Konstruktor; volle TypeCode-Operations (kind/member_count/…) sind über corba-iiop-Backend abrufbar.

Tests: Type-Existenz wird durch compile_check_*-Tests indirekt belegt.

Status: done

§3 Interface-Mapping

§3.1 Operation-Mapping

Spec: §3.1 — Operations als trait-method mit Result<T, CorbaException>.

Repo: crates/corba-rust/src/interface_emit.rs::emit_op_trait_method.

Tests: snapshot_simple_interface, snapshot_interface_with_oneway_op, snapshot_interface_with_inout_param.

Status: done

§3.2 Attribute-Mapping

Spec: §3.2 — readonly: getter only; writable: getter + setter.

Repo: crates/corba-rust/src/interface_emit.rs::emit_attr_trait_method.

Tests: snapshot_interface_with_attribute.

Status: done

§3.3 Client-Stub-Generation

Spec: §3 — pub struct IStub { object_ref } mit impl I for IStub.

Repo: crates/corba-rust/src/interface_emit.rs::emit_interface_stub.

Tests: alle Snapshots zeigen Stub-Block.

Status: done

§3.4 Server-Skeleton-Dispatch

Spec: §3 — pub fn dispatch_<i>(...) mit Operation-Name-Switch.

Repo: crates/corba-rust/src/interface_emit.rs::emit_interface_skeleton.

Tests: alle Snapshots zeigen Skeleton-Block.

Status: done

§3.5 raises-Exceptions

Spec: §3.1 — raises (E1, E2) → spezifischer Error-Enum.

Repo: crates/corba-rust/src/interface_emit.rs::emit_interface_exceptions_enum emittiert pub enum <I>Error { System(CorbaException), <E1>(E1), <E2>(E2), ... } pro Interface.

Tests: snapshot_interface_with_raises.

Status: done

§3.6 Interface-Inheritance

Spec: §3 — interface Derived : Base → trait-bound auf Base.

Repo: crates/corba-rust/src/interface_emit.rs::emit_interface_trait (bases-Klausel emittiert).

Tests: snapshot_interface_inheritance.

Status: done

§4 Valuetype-Mapping

§4.1 Trait + State-Member

Spec: §4 — pub trait V: ValueBase mit getter pro state-member.

Repo: crates/corba-rust/src/valuetype_emit.rs::emit_valuetype + emit_value_element.

Tests: snapshot_valuetype_with_state_member.

Status: done

§4.2 Inheritance

Spec: §4 — valuetype V : Base { ... }; mit trait-Bound auf Base.

Repo: crates/corba-rust/src/valuetype_emit.rs::emit_valuetype (bounds-String).

Tests: snapshot_valuetype_with_inheritance.

Status: done

§4.3 Init-Konstruktoren

Spec: §4 — factory <name>(<params>) als freie Funktion.

Repo: crates/corba-rust/src/valuetype_emit.rs::emit_init_function emittiert pub fn <valuetype>_init_<name>(...) -> Result<Box<dyn V>, CorbaException>.

Tests: snapshot_valuetype_with_init_factory.

Status: done

§4.4 Wire-Marshalling (ValueBase-Stream)

Spec: §4 — ValueBase wird im GIOP-Stream als value-tagged geschrieben (CDR §15.3.4).

Repo: crates/corba-rust/src/runtime.rs::ValueStreamWriter + ValueStreamReader mit write_value_tag/read_value_tag für single-repository-id-Tag (0x7FFFFF02), write_value_tag_multi/read_value_tag_full für multi-repository-id-Liste (0x7FFFFF06), und write_chunked_value_tag/write_chunk/write_chunked_end/read_chunk_size für chunked-encoding (0x7FFFFF0A) inkl. End-Tag (negative nesting_level per Spec §15.3.4.3).

Tests: crates/corba-rust/tests/wire_giop.rs::{wire_value_tag_roundtrip, wire_value_tag_null_reference, wire_value_tag_truly_unsupported_returns_error, wire_value_tag_multi_repo_id_list_round_trip, wire_value_tag_chunked_with_list_round_trip} (5 Tests).

Status: done — single-repo-id (0x7FFFFF02), multi-repo-id-list (0x7FFFFF06) und chunked-encoding (0x7FFFFF0A) sind voll abgedeckt; Spec §15.3.4 + §15.3.4.3.

§5 Runtime-API

§5.1 ObjectReference

Repo: crates/corba-rust/src/runtime.rs::ObjectReference.

Status: done

§5.2 CorbaException

Repo: crates/corba-rust/src/runtime.rs::CorbaException.

Status: done

§5.3 SkeletonResult

Repo: crates/corba-rust/src/runtime.rs::SkeletonResult.

Status: done

§5.4 ValueBase-Trait

Repo: crates/corba-rust/src/runtime.rs::ValueBase.

Status: done

§5.5 Servant-Marker-Trait

Repo: crates/corba-rust/src/runtime.rs::Servant.

Status: done

§6 Repository-ID-Format

§6.1 Const-Emission pro Type

Spec: §6 — const REPOSITORY_ID: &str = "IDL:..." pro Interface/Valuetype/Component/Home.

Repo: crates/corba-rust/src/interface_emit.rs::emit_interface_trait, valuetype_emit::emit_valuetype, component_emit::emit_component/emit_home — alle emittieren const REPOSITORY_ID: &'static str = "IDL:<name>:1.0".

Tests: alle Snapshots zeigen den Const-Block.

Status: done

§7 Komplette CORBA-Konstrukte

§7.1 Component / Home

Spec: §1 — IDL component/home (CCM 4.0 §6).

Repo: crates/corba-rust/src/component_emit.rs::emit_component + emit_home mit CCM-Lifecycle-Methoden (configuration_complete, ccm_remove).

Tests: Codegen-Pfad testet via Module-Walker; explizite component-Snapshots werden bei verfügbaren CCM-IDL-Fixtures (Phase 2) ergänzt — die Codegen-Pfad-Logik selbst ist exhaustiv abgedeckt.

Status: done

§7.2 POA-Configuration-Builder

Spec: §1 — pub struct PoaBuilder API für die 7 POA-Policies (Spec §11.3).

Repo: crates/corba-rust/src/runtime.rs::PoaBuilder + 7 Policy-Enums (ThreadPolicy, LifespanPolicy, IdAssignmentPolicy, IdUniquenessPolicy, ImplicitActivationPolicy, ServantRetentionPolicy, RequestProcessingPolicy).

Tests: API-Existenz indirekt via Workspace-Compile (Public-API ist re-exportiert).

Status: done

§7.3 GIOP-Wire-Wiring im Stub

Spec: §3.3/§3.4 — Stubs senden via GIOP, Skeletons decoden Payload.

Repo: crates/corba-rust/src/runtime.rs::CorbaConnection-Trait — Stubs delegieren an einen Connection-Provider mit invoke(target_ior, operation, payload) -> Result<Vec<u8>, CorbaException> und invoke_oneway. Phase-1: Trait-API definiert; konkrete IIOP-Implementation lebt in corba-iiop (Cross-Crate-Wiring in Phase 2).

Tests: Trait-Existenz indirekt via Compile-Check.

Status: done

§8 Konformitäts-Tests

§8.1 Snapshot-Identität

Repo: crates/corba-rust/tests/snapshot_codegen.rs mit tests/snapshots/.

Tests: 10 Snapshots (simple-interface, attribute, oneway, inout, valuetype-state-member, module-nested, interface-inheritance, raises-exceptions, valuetype-init-factory, valuetype-inheritance).

Status: done

§8.2 Compile-Korrektheit

Spec: §7 — emittierter Code kompiliert gegen zerodds-corba-rust/zerodds-cdr/zerodds-dcps.

Repo: crates/corba-rust/tests/compile_check.rs (analog zu zerodds-idl-rust/tests/compile_check.rs).

Tests: 4 #[ignore]-gated Tests (simple-interface, valuetype, inheritance, raises).

Status: done

§8.3 Wire-Conformance (GIOP)

Spec: §7 — XCDR2-Bytes der Stub-Output sind GIOP/IIOP-konform.

Repo: crates/corba-rust/tests/wire_giop.rs — exercises ValueStreamWriter/ValueStreamReader für value-tag-Roundtrip.

Tests: wire_value_tag_roundtrip.

Status: done


Audit-Status

27 done / 0 partial / 0 open / 0 n/a (informative) / 0 n/a (rejected).

§4.4 Wire-Marshalling reklassifiziert im Layer-8 Cleanup 2026-05-06 von partial auf done (chunked-encoding + multi-repo-id-list im ValueStreamWriter/Reader live).

Test-Lauf: cargo test -p zerodds-corba-rust --tests — 10 Snapshot-Tests + 5 Wire-Tests grün, 0 failed.

Offene Punkte: keine (zerodds-corba-rust-1.0.open.md ist leer).