use crate::ProviderContext;
use appcore_contracts::{DeploymentManifestV1, ProviderConfig, ProviderId};
use std::collections::BTreeMap;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeploymentProviderPlan {
context: ProviderContext,
storage: ProviderConfig,
control_plane: Option<ProviderConfig>,
coordination_store: Option<ProviderConfig>,
secret_provider: Option<ProviderConfig>,
job_provider: Option<ProviderConfig>,
peer_discovery: Option<ProviderConfig>,
update: Option<ProviderConfig>,
database: Option<ProviderConfig>,
peer_transport: ProviderId,
command_transport: ProviderId,
adapters: BTreeMap<String, ProviderConfig>,
}
impl DeploymentProviderPlan {
pub fn from_manifest(manifest: &DeploymentManifestV1) -> Self {
Self {
context: ProviderContext::from_manifest(manifest),
storage: manifest.storage().clone(),
control_plane: manifest.control_plane().cloned(),
coordination_store: manifest.coordination_store().cloned(),
secret_provider: manifest.secret_provider().cloned(),
job_provider: manifest.job_provider().cloned(),
peer_discovery: manifest.peer_discovery().cloned(),
update: manifest.update_provider().cloned(),
database: manifest.database().cloned(),
peer_transport: manifest.network().peer_transport().clone(),
command_transport: manifest.network().command_transport().clone(),
adapters: manifest.adapters().clone(),
}
}
pub fn context(&self) -> &ProviderContext {
&self.context
}
pub fn storage(&self) -> &ProviderConfig {
&self.storage
}
pub fn control_plane(&self) -> Option<&ProviderConfig> {
self.control_plane.as_ref()
}
pub fn coordination_store(&self) -> Option<&ProviderConfig> {
self.coordination_store.as_ref()
}
pub fn secret_provider(&self) -> Option<&ProviderConfig> {
self.secret_provider.as_ref()
}
pub fn job_provider(&self) -> Option<&ProviderConfig> {
self.job_provider.as_ref()
}
pub fn peer_discovery(&self) -> Option<&ProviderConfig> {
self.peer_discovery.as_ref()
}
pub fn update(&self) -> Option<&ProviderConfig> {
self.update.as_ref()
}
pub fn database(&self) -> Option<&ProviderConfig> {
self.database.as_ref()
}
pub fn peer_transport(&self) -> &ProviderId {
&self.peer_transport
}
pub fn command_transport(&self) -> &ProviderId {
&self.command_transport
}
pub fn adapters(&self) -> &BTreeMap<String, ProviderConfig> {
&self.adapters
}
}