Skip to main content

MetadataRecorder

Struct MetadataRecorder 

Source
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>

Source

pub const fn new() -> Self

Create an empty metadata recorder.

Source

pub fn nodes(&self) -> &[NodeMetadata]

Recorded nodes in declaration order.

Source

pub fn entities(&self) -> &[EntityMetadata]

Recorded entities in declaration order.

Source

pub fn callback_effects(&self) -> &[CallbackEffectMetadata]

Recorded optional callback effects in declaration order.

Source

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.

Source

pub fn to_source_metadata_json( &self, export: &SourceMetadataExport<'_>, ) -> Result<StdString, Error>

Emit source metadata JSON (SOURCE_METADATA_SCHEMA_VERSION) without opening transport.

Source

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.

Source

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.

Source

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.

Trait Implementations§

Source§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> Debug for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> Default for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> NodeRuntime for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

Source§

fn create_node( &mut self, id: NodeId<'_>, options: NodeOptions<'_>, ) -> NodeResult<()>

Declare a component node.
Source§

fn create_entity(&mut self, metadata: EntityMetadata) -> NodeResult<()>

Declare a publisher, subscription, timer, service, action, or parameter.
Source§

fn record_callback_effect( &mut self, callback_id: CallbackId<'_>, kind: CallbackEffectKind, entity_id: EntityId<'_>, ) -> NodeResult<()>

Add optional callback effect metadata.

Auto Trait Implementations§

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> Freeze for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> RefUnwindSafe for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> Send for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> Sync for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> Unpin for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> UnsafeUnpin for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

§

impl<const MAX_NODES: usize, const MAX_ENTITIES: usize, const MAX_CALLBACKS: usize> UnwindSafe for MetadataRecorder<MAX_NODES, MAX_ENTITIES, MAX_CALLBACKS>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.