1use crate::ProviderContext;
12use appcore_contracts::{DeploymentManifestV1, ProviderConfig, ProviderId};
13use std::collections::BTreeMap;
14
15#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct DeploymentProviderPlan {
18 context: ProviderContext,
19 storage: ProviderConfig,
20 control_plane: Option<ProviderConfig>,
21 coordination_store: Option<ProviderConfig>,
22 secret_provider: Option<ProviderConfig>,
23 job_provider: Option<ProviderConfig>,
24 peer_discovery: Option<ProviderConfig>,
25 update: Option<ProviderConfig>,
26 database: Option<ProviderConfig>,
27 peer_transport: ProviderId,
28 command_transport: ProviderId,
29 adapters: BTreeMap<String, ProviderConfig>,
30}
31
32impl DeploymentProviderPlan {
33 pub fn from_manifest(manifest: &DeploymentManifestV1) -> Self {
35 Self {
36 context: ProviderContext::from_manifest(manifest),
37 storage: manifest.storage().clone(),
38 control_plane: manifest.control_plane().cloned(),
39 coordination_store: manifest.coordination_store().cloned(),
40 secret_provider: manifest.secret_provider().cloned(),
41 job_provider: manifest.job_provider().cloned(),
42 peer_discovery: manifest.peer_discovery().cloned(),
43 update: manifest.update_provider().cloned(),
44 database: manifest.database().cloned(),
45 peer_transport: manifest.network().peer_transport().clone(),
46 command_transport: manifest.network().command_transport().clone(),
47 adapters: manifest.adapters().clone(),
48 }
49 }
50
51 pub fn context(&self) -> &ProviderContext {
53 &self.context
54 }
55
56 pub fn storage(&self) -> &ProviderConfig {
58 &self.storage
59 }
60
61 pub fn control_plane(&self) -> Option<&ProviderConfig> {
63 self.control_plane.as_ref()
64 }
65
66 pub fn coordination_store(&self) -> Option<&ProviderConfig> {
68 self.coordination_store.as_ref()
69 }
70
71 pub fn secret_provider(&self) -> Option<&ProviderConfig> {
73 self.secret_provider.as_ref()
74 }
75
76 pub fn job_provider(&self) -> Option<&ProviderConfig> {
78 self.job_provider.as_ref()
79 }
80
81 pub fn peer_discovery(&self) -> Option<&ProviderConfig> {
83 self.peer_discovery.as_ref()
84 }
85
86 pub fn update(&self) -> Option<&ProviderConfig> {
88 self.update.as_ref()
89 }
90
91 pub fn database(&self) -> Option<&ProviderConfig> {
93 self.database.as_ref()
94 }
95
96 pub fn peer_transport(&self) -> &ProviderId {
98 &self.peer_transport
99 }
100
101 pub fn command_transport(&self) -> &ProviderId {
103 &self.command_transport
104 }
105
106 pub fn adapters(&self) -> &BTreeMap<String, ProviderConfig> {
108 &self.adapters
109 }
110}