pub struct MetadataRecorder<const MAX_NODES: usize = DEFAULT_MAX_METADATA_NODES, const MAX_ENTITIES: usize = DEFAULT_MAX_METADATA_ENTITIES, const MAX_CALLBACKS: usize = DEFAULT_MAX_METADATA_CALLBACKS> { /* private fields */ }Expand description
In-memory metadata sink used by host discovery. It never opens transport.
Implementations§
Source§impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>
impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>
Sourcepub fn nodes(&self) -> &[NodeMetadata]
pub fn nodes(&self) -> &[NodeMetadata]
Recorded nodes in declaration order.
Sourcepub fn entities(&self) -> &[EntityMetadata]
pub fn entities(&self) -> &[EntityMetadata]
Recorded entities in declaration order.
Sourcepub fn callback_effects(&self) -> &[CallbackEffectMetadata]
pub fn callback_effects(&self) -> &[CallbackEffectMetadata]
Recorded optional callback effects in declaration order.
Sourcepub fn observe_subscription_registration(
&mut self,
source_name: &str,
type_name: &str,
in_place_capable: bool,
buffered_row: BufferedRow,
) -> bool
pub fn observe_subscription_registration( &mut self, source_name: &str, type_name: &str, in_place_capable: bool, buffered_row: BufferedRow, ) -> bool
phase-457 W3 — attach an OBSERVED registration fact to the subscription row that registered it.
A subscription is recorded when the backend creates it and observed when
the executor registers it, which are two moments in one call — the RMW
seam runs inside Executor::open_subscription. So the row exists and the
fact arrives afterwards; this is the join.
Keyed on (source_name, type_name) and taking the LAST unset match,
which is the row that was just created: two subscriptions on one topic of
one type are indistinguishable at this seam, and taking them in order is
the only attribution available. Returns false when no such row is
waiting — a caller that drops that has silently lost a fact, which is why
this is #[must_use] like every other recorder entry point.
Refuses to overwrite. A row whose fact is already set is not a match, so a second observation lands on the next unset row rather than re-stating the first — the difference matters exactly when two rows disagree, which is the case this whole field exists for.
Sourcepub fn to_source_metadata_json(
&self,
export: &SourceMetadataExport<'_>,
) -> Result<StdString, Error>
pub fn to_source_metadata_json( &self, export: &SourceMetadataExport<'_>, ) -> Result<StdString, Error>
Emit source metadata JSON (SOURCE_METADATA_SCHEMA_VERSION) without
opening transport.
Sourcepub fn write_source_metadata_json(
&self,
export: &SourceMetadataExport<'_>,
out: &mut impl Write,
) -> Result
pub fn write_source_metadata_json( &self, export: &SourceMetadataExport<'_>, out: &mut impl Write, ) -> Result
Write source metadata JSON (SOURCE_METADATA_SCHEMA_VERSION) without
opening transport.
Sourcepub fn push_node(
&mut self,
id: NodeId<'_>,
name: &str,
namespace: &str,
domain_id: u32,
) -> Result<(), NodeMetadataError>
pub fn push_node( &mut self, id: NodeId<'_>, name: &str, namespace: &str, domain_id: u32, ) -> Result<(), NodeMetadataError>
Record a node.
phase-308 — pub because the recorder is the ONE recorder: the Rust
adapter (a NodeContext sink) and the C/C++ adapter (a recording RMW
backend + the timer/guard hooks in nros-cpp) both feed it, so there is
one definition of what a slot is and one schema emitter. Only the
adapter is per-language. Not a general-purpose API — it exists for
metadata-mode adapters, and misuse produces a sidecar that lies about
what the component declares.
Sourcepub fn push_entity(
&mut self,
entity: EntityMetadata,
) -> Result<(), NodeMetadataError>
pub fn push_entity( &mut self, entity: EntityMetadata, ) -> Result<(), NodeMetadataError>
Record an entity against an already-recorded node. See push_node
for why this is public.