use crate::ic::IcDashboardReportProvenance;
use serde::{Deserialize, Serialize};
#[cfg(feature = "dashboard-host")]
use crate::ic::IcSourceRequest;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CloudEngineProviderListRequest {
pub network: String,
pub source_endpoint: String,
pub now_unix_secs: u64,
}
impl CloudEngineProviderListRequest {
#[must_use]
pub fn new(
network: impl Into<String>,
source_endpoint: impl Into<String>,
now_unix_secs: u64,
) -> Self {
Self {
network: network.into(),
source_endpoint: source_endpoint.into(),
now_unix_secs,
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CloudEngineProviderInfoRequest {
pub network: String,
pub source_endpoint: String,
pub now_unix_secs: u64,
pub node_provider_id: String,
}
impl CloudEngineProviderInfoRequest {
#[must_use]
pub fn new(
network: impl Into<String>,
source_endpoint: impl Into<String>,
now_unix_secs: u64,
node_provider_id: impl Into<String>,
) -> Self {
Self {
network: network.into(),
source_endpoint: source_endpoint.into(),
now_unix_secs,
node_provider_id: node_provider_id.into(),
}
}
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct CloudEngineProviderLocation {
pub dc_key: String,
pub display_name: String,
pub latitude: f64,
pub longitude: f64,
pub owner: String,
pub region: String,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct CloudEngineProviderRow {
pub principal_id: String,
pub display_name: String,
pub website: Option<String>,
pub logo_url: Option<String>,
pub location_count: usize,
pub locations: Vec<CloudEngineProviderLocation>,
pub cloud_engine_location_count: usize,
pub cloud_engine_locations: Vec<CloudEngineProviderLocation>,
pub total_cloud_engine_nodes: u64,
pub total_cloud_engine_unassigned_nodes: u64,
pub total_cloud_engines: u64,
pub total_node_allowance: u64,
pub total_nodes: u64,
pub total_rewardable_nodes: u64,
pub total_subnets: u64,
pub total_unassigned_nodes: u64,
}
impl CloudEngineProviderRow {
#[must_use]
pub const fn has_cloud_engine_evidence(&self) -> bool {
self.cloud_engine_location_count > 0
|| !self.cloud_engine_locations.is_empty()
|| self.total_cloud_engine_nodes > 0
|| self.total_cloud_engine_unassigned_nodes > 0
|| self.total_cloud_engines > 0
}
}
#[derive(Clone, Debug, PartialEq, Serialize)]
pub struct CloudEngineProviderListReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub source_node_provider_count: usize,
pub cloud_engine_provider_count: usize,
pub providers: Vec<CloudEngineProviderRow>,
}
#[derive(Clone, Debug, PartialEq, Serialize)]
pub struct CloudEngineProviderInfoReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub cloud_engine_evidence_present: bool,
pub provider: CloudEngineProviderRow,
}
#[cfg(feature = "dashboard-host")]
#[derive(Clone, Debug, PartialEq)]
pub struct CloudEngineProviderListSourceData {
pub source: IcSourceRequest,
pub providers: Vec<CloudEngineProviderRow>,
}
#[cfg(feature = "dashboard-host")]
#[derive(Clone, Debug, PartialEq)]
pub struct CloudEngineProviderInfoSourceData {
pub source: IcSourceRequest,
pub provider: CloudEngineProviderRow,
}