1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//! Defines the interface that [`LoadBalancedChannel`](crate::LoadBalancedChannel) requires in order
//! to resolve all the IP adresses for a given service.
use std::{collections::HashSet, net::SocketAddr};
use crate::ServiceDefinition;
/// Interface that provides functionality to
/// acquire a list of ips given a valid host name.
#[async_trait::async_trait]
pub trait LookupService {
/// Return a list of unique [`SocketAddr`] associated with the provided
/// [`ServiceDefinition`](crate::ServiceDefinition) containing the `hostname` `port` of the service.
/// If no ip addresses were resolved, an empty HashSet is returned.
async fn resolve_service_endpoints(
&self,
definition: &ServiceDefinition,
) -> Result<HashSet<SocketAddr>, anyhow::Error>;
}