use crate::nns::NnsInventoryRefreshReport;
use super::{
NnsTopologyHostError, NnsTopologyReadRequest, NnsTopologyRefreshRequest,
request::{
inventory_list_request, inventory_refresh_request, node_list_request,
subnet_catalog_list_request, subnet_catalog_refresh_request,
},
};
use crate::{
nns::{
LiveNnsSource,
data_center::{
NnsDataCenterListReport, build_nns_data_center_list_report,
refresh_nns_data_center_report,
},
node::{NnsNodeListReport, build_nns_node_list_report, refresh_nns_node_report},
node_operator::{
NnsNodeOperatorListReport, build_nns_node_operator_list_report,
refresh_nns_node_operator_report,
},
node_provider::{
NnsNodeProviderListReport, build_nns_node_provider_list_report,
refresh_nns_node_provider_report,
},
},
subnet_catalog::{
SubnetCatalogListReport, SubnetCatalogRefreshReport, build_subnet_catalog_list_report,
refresh_subnet_catalog,
},
};
pub trait NnsTopologySource: Sync {
fn fetch_subnet_catalog_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<SubnetCatalogListReport, NnsTopologyHostError>>;
fn fetch_node_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsNodeListReport, NnsTopologyHostError>>;
fn fetch_node_provider_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsNodeProviderListReport, NnsTopologyHostError>>;
fn fetch_node_operator_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsNodeOperatorListReport, NnsTopologyHostError>>;
fn fetch_data_center_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsDataCenterListReport, NnsTopologyHostError>>;
}
pub trait NnsTopologyRefreshSource: Sync {
fn refresh_subnet_catalog_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<SubnetCatalogRefreshReport, NnsTopologyHostError>>;
fn refresh_node_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>;
fn refresh_node_provider_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>;
fn refresh_node_operator_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>;
fn refresh_data_center_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>;
}
impl NnsTopologySource for LiveNnsSource {
fn fetch_subnet_catalog_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<SubnetCatalogListReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(build_subnet_catalog_list_report(&subnet_catalog_list_request(request)).await?)
})
}
fn fetch_node_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsNodeListReport, NnsTopologyHostError>> {
Box::pin(async move { Ok(build_nns_node_list_report(&node_list_request(request)).await?) })
}
fn fetch_node_provider_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsNodeProviderListReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(build_nns_node_provider_list_report(&inventory_list_request(request)).await?)
})
}
fn fetch_node_operator_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsNodeOperatorListReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(build_nns_node_operator_list_report(&inventory_list_request(request)).await?)
})
}
fn fetch_data_center_list_report<'a>(
&'a self,
request: &'a NnsTopologyReadRequest,
) -> crate::report::SourceFuture<'a, Result<NnsDataCenterListReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(build_nns_data_center_list_report(&inventory_list_request(request)).await?)
})
}
}
impl NnsTopologyRefreshSource for LiveNnsSource {
fn refresh_subnet_catalog_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<SubnetCatalogRefreshReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(refresh_subnet_catalog(&subnet_catalog_refresh_request(request)).await?)
})
}
fn refresh_node_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>
{
Box::pin(
async move { Ok(refresh_nns_node_report(&inventory_refresh_request(request)).await?) },
)
}
fn refresh_node_provider_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(refresh_nns_node_provider_report(&inventory_refresh_request(request)).await?)
})
}
fn refresh_node_operator_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(refresh_nns_node_operator_report(&inventory_refresh_request(request)).await?)
})
}
fn refresh_data_center_report<'a>(
&'a self,
request: &'a NnsTopologyRefreshRequest,
) -> crate::report::SourceFuture<'a, Result<NnsInventoryRefreshReport, NnsTopologyHostError>>
{
Box::pin(async move {
Ok(refresh_nns_data_center_report(&inventory_refresh_request(request)).await?)
})
}
}