Skip to main content

Crate nros_rmw_cffi

Crate nros_rmw_cffi 

Source
Expand description

C function table adapter for nros RMW backends.

This crate provides a vtable-based bridge so that backends written in C, C++, Zig, Ada, or any language with a C-compatible ABI can implement the nros Session / Publisher / Subscription / service traits without writing Rust code.

§Usage (C backend implementor)

  1. Include <nros/rmw_vtable.h>
  2. Implement all function pointers in nros_rmw_vtable_t
  3. Call nros_rmw_cffi_register(&my_vtable) before creating sessions

§Usage (Rust consumer)

Enable the rmw-cffi feature on nros and use Executor<CffiSession>.

Re-exports§

pub use rust_adapter::RustBackend;
pub use rust_adapter::RustBackendAdapter;
pub use generated::*;

Modules§

generated
AUTO-GENERATED by scripts/gen-abi-bindings.sh (bindgen 0.72.1) — DO NOT EDIT.
rust_adapter
Phase 115.L.0 — Generic Rust-trait → C-vtable adapter.
section
RMW backend self-registration (Phase 249 P4b.1 — .init_array ctor).

Macros§

nros_rmw_register_backend
Macro emitted by backend crates to self-register their vtable.

Structs§

CffiClient
Service client backed by a C vtable.
CffiPublisher
Publisher backed by a C vtable.
CffiRmw
RMW factory for the C function table backend.
CffiService
Service server backed by a C vtable.
CffiSession
Session backed by a C vtable.
CffiSubscription
Subscription backed by a C vtable.

Enums§

BackendResolution
Phase 128.A.3 — outcome of resolve_backend.

Constants§

EMPTY_VTABLE
A vtable with every slot NULL — the base for struct-update syntax.
MAX_BACKENDS
Compile-time max number of concurrently registered backends. Set via NROS_RMW_MAX_BACKENDS env var at build time (build.rs). Default 8.
MAX_NODES
Distinct (session, name, namespace) triples the shim tracks. Raise with NROS_RMW_MAX_NODES; the default mirrors the executor’s MAX_NODES.
NROS_RMW_QOS_PROFILE_DEFAULT
Standard rmw_qos_profile_default-equivalent.
NROS_RMW_QOS_PROFILE_PARAMETERS
Standard rmw_qos_profile_parameters-equivalent.
NROS_RMW_QOS_PROFILE_SENSOR_DATA
Standard rmw_qos_profile_sensor_data-equivalent.
NROS_RMW_QOS_PROFILE_SERVICES_DEFAULT
Standard rmw_qos_profile_services_default-equivalent.
NROS_RMW_QOS_PROFILE_SYSTEM_DEFAULT
Standard rmw_qos_profile_system_default-equivalent — all sentinel.

Functions§

backend_registered
Phase 104.A — registry-presence probe. Returns true iff at least one backend is registered. Used by Executor::open to detect “user forgot to register a backend before opening the session” and fail with a meaningful error.
backend_resolution_to_ret
Phase 128.A.3 — map a BackendResolution to its canonical NrosRmwRet. BackendResolution::Single is not an error and returns NROS_RMW_RET_OK; callers needing the vtable should pattern-match on the resolution itself.
error_from_ret
Map a rmw_ret_t returned by a C-side vtable function back to a TransportError for the Rust caller. Inverse of ret_from_error — used when nros-rmw-cffi’s CffiSession etc. receive a code from the registered C backend.
event_kind_from_c
Convert a C ABI event-kind discriminant to the trait-level nros_rmw::EventKind. Replaces the retired From<NrosRmwEventKind> for nros_rmw::EventKind. Unknown values map to MessageLost, mirroring the forward direction’s fallback.
event_kind_to_c
Convert a trait-level nros_rmw::EventKind to the C ABI discriminant. Replaces the retired From<nros_rmw::EventKind> for NrosRmwEventKind.
nros_rmw_cffi_lookup
Look up a backend’s vtable by name. Returns NULL if no backend is registered under name.
nros_rmw_cffi_registerDeprecated
Register a custom RMW backend vtable (legacy single-arg form).
nros_rmw_cffi_register_named
Register a backend under a stable name. Multiple backends can coexist; consumers select via nros_rmw_cffi_lookup or the higher-level Executor::node_builder(...).rmw(...) path.
nros_rmw_cffi_registered_names
Diagnostic helper — fills buf with pointers to up to cap registered backend names. Returns the number of names available (may exceed cap). Pointer-valid for the program’s lifetime.
nros_rmw_cffi_set_custom_transport
Phase 115.A.2 — C entry point for installing a custom transport.
nros_rmw_qos_incompatibility_mask
See nros/rmw_entity.h.
resolve_backend
Phase 128.A.3 — selection policy for the single-backend Executor::open / nros::init path.
ret_from_error
Map a TransportError to the corresponding rmw_ret_t code.
rmw_compare_gids_equal
See nros/rmw_entity.h.
rmw_qos_profile_check_compatible
See nros/rmw_entity.h.
rmw_severity_of
Map nros_log’s ladder onto upstream’s.
set_backend_log_severity
Set the verbosity of every registered BACKEND’s own logging.

Type Aliases§

NrosRmwClient
Compat alias for the generated rmw_client_t.
NrosRmwCountStatus
Compat alias for the generated rmw_count_status_t.
NrosRmwEventCallback
Compat alias for the generated rmw_status_event_callback_t (nullable — Option-wrapped fn pointer, per C ABI).
NrosRmwEventKind
Compat alias for the generated rmw_event_type_t::Type (C-unsigned-sized event-kind discriminant).
NrosRmwEventPayload
Compat alias for the generated rmw_event_payload_t union.
NrosRmwLivelinessChangedStatus
Compat alias for the generated rmw_liveliness_changed_status_t.
NrosRmwNode
Phase 376 W5/B1 — a graph node. The first argument of the four create_* slots, in place of the fabricated per-call session view they used to take.
NrosRmwPublisher
Compat alias for the generated rmw_publisher_t.
NrosRmwQos
Compat alias for the generated rmw_qos_profile_t.
NrosRmwRet
Compat alias for the generated rmw_ret_t typedef. Zero on success; negative on error.
NrosRmwService
Compat alias for the generated rmw_service_t.
NrosRmwSession
Compat alias for the generated rmw_session_t.
NrosRmwSessionOptions
issue 0808 — session creation options; NULL means every default.
NrosRmwSubscription
Compat alias for the generated rmw_subscription_t.
NrosRmwVtable
Compat alias for the generated nros_rmw_vtable_t.