use super::{
NnsTopologyHostError, NnsTopologyRefreshRequest,
request::{subnet_catalog_list_request, subnet_catalog_refresh_request},
};
use crate::{
nns::{LiveNnsSource, NnsInventoryListRequest, node_provider::NnsNodeProviderSource},
report::SourceFuture,
subnet_catalog::{SubnetCatalogListReport, SubnetCatalogRefreshReport},
};
pub trait NnsTopologySource: NnsNodeProviderSource {
fn fetch_subnet_catalog_list_report<'a>(
&'a self,
request: &'a NnsInventoryListRequest,
) -> SourceFuture<'a, Result<SubnetCatalogListReport, NnsTopologyHostError>>;
}
pub trait NnsTopologyRefreshSource: NnsNodeProviderSource {
fn refresh_subnet_catalog_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> SourceFuture<'a, Result<SubnetCatalogRefreshReport, NnsTopologyHostError>>;
}
impl NnsTopologySource for LiveNnsSource {
fn fetch_subnet_catalog_list_report<'a>(
&'a self,
request: &'a NnsInventoryListRequest,
) -> SourceFuture<'a, Result<SubnetCatalogListReport, NnsTopologyHostError>> {
Box::pin(async move {
Ok(crate::subnet_catalog::build_subnet_catalog_list_report(
&subnet_catalog_list_request(request),
)
.await?)
})
}
}
impl NnsTopologyRefreshSource for LiveNnsSource {
fn refresh_subnet_catalog_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> SourceFuture<'a, Result<SubnetCatalogRefreshReport, NnsTopologyHostError>> {
Box::pin(async move {
Ok(
crate::subnet_catalog::refresh_subnet_catalog(&subnet_catalog_refresh_request(
request,
))
.await?,
)
})
}
}