Class DiscoveryLayer

Inheritance Relationships

Derived Types

Class Documentation

class DiscoveryLayer

Interface for a pluggable discovery data source.

Each layer produces entities and declares how its data should be merged with other layers via per-field-group MergePolicy.

Subclassed by ros2_medkit_gateway::discovery::ManifestLayer, ros2_medkit_gateway::discovery::PluginLayer, ros2_medkit_gateway::discovery::RuntimeLayer

Public Functions

virtual ~DiscoveryLayer() = default
virtual std::string name() const = 0

Human-readable layer name (e.g., “manifest”, “runtime”, plugin name)

virtual LayerOutput discover() = 0

Discover entities from this layer’s source.

virtual MergePolicy policy_for(FieldGroup group) const = 0

Merge policy this layer uses for the given field group.

inline virtual bool provides_runtime_apps() const

Whether this layer provides runtime apps for post-merge linking. Only RuntimeLayer (or test doubles) should return true.

inline virtual size_t filtered_count() const

Number of entities filtered by gap-fill in last discover(). Default 0.

inline virtual std::vector<App> get_linking_apps() const

Return unfiltered runtime apps for post-merge linking. Gap-fill may exclude apps from discover() output, but the linker needs all runtime apps to bind manifest apps to live nodes. Only RuntimeLayer (or test doubles) should override this.

inline virtual void set_discovery_context(const IntrospectionInput&)

Provide the current discovery context (entities from previous layers). Called by MergePipeline before discover(). Default no-op.