zerodds-rpc 1.0.0-rc.1

DDS-RPC 1.0 (formal/16-12-04): Requester/Replier-Runtime, Service-Mapping (IDL→Wire), Topic-Naming, function_call/dispatch_request, Evolution-Rules + Cross-PSM-Cross-Reference.
Documentation

zerodds-rpc

License: Apache-2.0 docs.rs

Request/Reply-Framework auf dem ZeroDDS-DCPS-Stack nach OMG DDS-RPC 1.0 (formal/16-12-04). Pure-Rust + alloc. Safety classification: STANDARD.

Spec-Mapping

Spec Abschnitt
OMG DDS-RPC 1.0 §7.3 (IDL-Annotations), §7.4 (Service-Mapping), §7.5 (Common-Types + Member-Hash), §7.6 (Evolution-Rules), §7.7 (function_call/dispatch), §7.8 (Topic-Naming + Request-Identity + Discovery-Ext), §7.9 (Requester), §7.10 (Replier), §7.11 (QoS-Profile)

Vollabdeckung der Spec laut docs/spec-coverage/dds-rpc-1.0.md.

Was ist drin

Foundation:

  • RequestHeader, ReplyHeader, SampleIdentity, RemoteExceptionCode (XCDR2-encoded).
  • topic_naming::{request_topic_name, reply_topic_name, validate_service_name, REQUEST_SUFFIX, REPLY_SUFFIX, ServiceTopicNames}.
  • annotations::{LoweredRpc, RpcAnnotation, lower_rpc_annotations} — IDL @service/@oneway/@in/@out/@inout-Lowering.
  • service_mapping::{ServiceDef, MethodDef, ParamDef, ParamDirection, TypeRef, lower_service}.
  • codegen::{ServiceLayout, RequestType, ReplyType, MethodPair, CallUnionDef, CallUnionCase, MemberType, StructMember, build_basic_pair, build_enhanced_pair, build_enhanced_all}.
  • rpc_hash::rpc_member_hash — Spec §7.5.4 Member-Hash.

Runtime:

  • Requester<TIn, TOut> — synchroner Client mit send_request_blocking + tick-driven send_request_async.
  • Replier<TIn, TOut> + ReplierHandler-Trait + FnHandler-Adapter.
  • RpcEndpointBuilder, RequesterEndpoint, ReplierEndpoint.
  • RpcQos::{default_basic, default_enhanced, from_xml_profile} — Spec §7.11 Foundation/Enhanced + XML-Profile-Resolution.
  • wire_codec::{encode_request_frame, decode_request_frame, encode_reply_frame, decode_reply_frame}.

Cross-Cutting:

  • discovery_ext::{PublicationBuiltinTopicDataExt, SubscriptionBuiltinTopicDataExt, ServiceMappingProfile, client_matches_service, service_matches_client} — Spec §7.8.4.
  • function_call::{FunctionStub, FunctionSkeleton, OperationDescriptor, ServiceDescriptor, dispatch_request} — Spec §7.7.
  • evolution_rules::{Evolution, Mapping, compatible_evolutions, is_compatible} — Spec §7.6.5.
  • request_identity::RequestIdentity — Spec §7.8.2.

Errors: RpcError / RpcResult.

Schichten-Position

Layer 4 — Core Services. Konsumiert zerodds-dcps (Writer/Reader/QoS), zerodds-idl (IDL-AST), zerodds-qos (DDS-QoS-Policies), zerodds-rtps (Inline-QoS-PIDs), zerodds-types (DdsType-Trait), zerodds-xml (Profile-Loader).

Quickstart

use zerodds_rpc::{Requester, Replier, RpcQos, FnHandler};
use zerodds_dcps::participant::DomainParticipant;

let participant = DomainParticipant::new(0)?;
let qos = RpcQos::default_basic();

// Replier: Service-Implementation
let replier = Replier::<MyRequest, MyReply>::new(
    &participant, "Calculator", &qos,
    FnHandler::new(|req: MyRequest| MyReply { sum: req.a + req.b }),
)?;

// Requester: Client
let requester = Requester::<MyRequest, MyReply>::new(&participant, "Calculator", &qos)?;
let reply = requester.send_request_blocking(&MyRequest { a: 1, b: 2 })?;
assert_eq!(reply.sum, 3);

Feature-Flags

Feature Default Zweck
std Threading + Mutex/mpsc fuer Requester/Replier.
alloc ✅ via std Vec/String.
safety Reserve-Hook fuer extra Defensive-Checks.

Foundation-Layer-Module bauen auch in no_std + alloc. Runtime-Module (requester, replier, qos_profile, endpoint) brauchen std.

Stabilitaet

1.0.0-rc.1 materialisiert die Spec-Abdeckung von OMG DDS-RPC 1.0 vollstaendig. Public-API + Wire-Format sind RC1-stabil.

Tests

cargo test -p zerodds-rpc

180 Tests gruen (171 lib + 5 + 4 integration).

Lizenz

Apache-2.0. Siehe LICENSE.

Siehe auch