use crate::connection::WorkerConnectionKey;
use crate::registry::CapabilityRegistry;
use appcore_types::CapabilityName;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SelectionPolicy {
FirstAvailable,
}
#[derive(Debug, Clone)]
pub struct CapabilityResolver {
policy: SelectionPolicy,
}
impl Default for CapabilityResolver {
fn default() -> Self {
Self {
policy: SelectionPolicy::FirstAvailable,
}
}
}
impl CapabilityResolver {
pub fn new() -> Self {
Self::default()
}
pub fn resolve(
&self,
capability: &CapabilityName,
registry: &CapabilityRegistry,
) -> Option<WorkerConnectionKey> {
let candidates = registry.resolve(capability)?;
match self.policy {
SelectionPolicy::FirstAvailable => candidates.iter().next().cloned(),
}
}
}