feat(host): resolve published interface references
This commit is contained in:
@@ -208,6 +208,18 @@ impl InterfaceRegistry {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Resolves a transport-provided opaque reference string in this registry.
|
||||||
|
///
|
||||||
|
/// The returned value is registry-scoped and suitable for observation or a
|
||||||
|
/// qualified [`CallRequest`]. Unknown or foreign references return `None`;
|
||||||
|
/// constructing arbitrary `InterfaceRef` values is intentionally not part of
|
||||||
|
/// the public API.
|
||||||
|
#[must_use]
|
||||||
|
pub fn resolve(&self, reference: &str) -> Option<InterfaceRef> {
|
||||||
|
let reference = InterfaceRef(reference.to_owned());
|
||||||
|
self.artifacts.contains_key(&reference).then_some(reference)
|
||||||
|
}
|
||||||
|
|
||||||
/// Observes the descriptor and optional validator for an opaque reference.
|
/// Observes the descriptor and optional validator for an opaque reference.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn observe(&self, reference: &InterfaceRef) -> Option<InterfaceObservation> {
|
pub fn observe(&self, reference: &InterfaceRef) -> Option<InterfaceObservation> {
|
||||||
|
|||||||
@@ -163,6 +163,11 @@ fn registry_exposes_opaque_validated_descriptor_observations() {
|
|||||||
let reader = registry.register(ReaderDefinition, None).unwrap();
|
let reader = registry.register(ReaderDefinition, None).unwrap();
|
||||||
|
|
||||||
assert_ne!(reader.reference().as_str(), "Reader");
|
assert_ne!(reader.reference().as_str(), "Reader");
|
||||||
|
assert_eq!(
|
||||||
|
registry.resolve(reader.reference().as_str()).as_ref(),
|
||||||
|
Some(reader.reference())
|
||||||
|
);
|
||||||
|
assert!(registry.resolve("wip-interface:unknown:0").is_none());
|
||||||
let observation = registry.observe(reader.reference()).unwrap();
|
let observation = registry.observe(reader.reference()).unwrap();
|
||||||
assert_eq!(observation.reference, *reader.reference());
|
assert_eq!(observation.reference, *reader.reference());
|
||||||
assert_eq!(observation.descriptor.name, reader.reference().as_str());
|
assert_eq!(observation.descriptor.name, reader.reference().as_str());
|
||||||
@@ -174,6 +179,11 @@ fn registry_exposes_opaque_validated_descriptor_observations() {
|
|||||||
let mut other_registry = InterfaceRegistry::new();
|
let mut other_registry = InterfaceRegistry::new();
|
||||||
let other_reader = other_registry.register(ReaderDefinition, None).unwrap();
|
let other_reader = other_registry.register(ReaderDefinition, None).unwrap();
|
||||||
assert_ne!(reader.reference(), other_reader.reference());
|
assert_ne!(reader.reference(), other_reader.reference());
|
||||||
|
assert!(
|
||||||
|
registry
|
||||||
|
.resolve(other_reader.reference().as_str())
|
||||||
|
.is_none()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user