Skip to main content

greentic_deployer/
surface.rs

1//! Unified deployer surface over isolated adapter families.
2//!
3//! This module exists to make the intended public shape explicit:
4//! - `surface::single_vm` for the stable OSS single-VM adapter
5//! - `surface::multi_target` for the provider-oriented adapter family
6//! - `surface::aws` for the AWS adapter surface
7//! - `surface::azure` for the Azure adapter surface
8//! - `surface::gcp` for the GCP adapter surface
9//! - `surface::helm` for the Helm adapter surface
10//! - `surface::juju_k8s` for the Juju k8s adapter surface
11//! - `surface::juju_machine` for the Juju machine adapter surface
12//! - `surface::k8s_raw` for the raw-manifests k8s adapter surface
13//! - `surface::operator` for the k8s operator adapter surface
14//! - `surface::serverless` for the serverless adapter surface
15//! - `surface::snap` for the Snap adapter surface
16//! - `surface::terraform` for the first explicit multi-target adapter surface
17//!
18//! Existing top-level exports remain for compatibility while the repo evolves
19//! toward this clearer separation.
20
21/// Stable OSS single-VM adapter surface.
22pub mod single_vm {
23    pub use crate::single_vm::*;
24}
25
26/// Provider-oriented multi-target adapter surface.
27pub mod multi_target {
28    pub use crate::multi_target::*;
29}
30
31/// Explicit AWS adapter surface layered over the multi-target family.
32pub mod aws {
33    pub use crate::aws::*;
34}
35
36/// Explicit Azure adapter surface layered over the multi-target family.
37pub mod azure {
38    pub use crate::azure::*;
39}
40
41/// Explicit GCP adapter surface layered over the multi-target family.
42pub mod gcp {
43    pub use crate::gcp::*;
44}
45
46/// Explicit Helm adapter surface layered over the multi-target family.
47pub mod helm {
48    pub use crate::helm::*;
49}
50
51/// Explicit Juju k8s adapter surface layered over the multi-target family.
52pub mod juju_k8s {
53    pub use crate::juju_k8s::*;
54}
55
56/// Explicit Juju machine adapter surface layered over the multi-target family.
57pub mod juju_machine {
58    pub use crate::juju_machine::*;
59}
60
61/// Explicit k8s raw-manifests adapter surface layered over the multi-target family.
62pub mod k8s_raw {
63    pub use crate::k8s_raw::*;
64}
65
66/// Explicit k8s operator adapter surface layered over the multi-target family.
67pub mod operator {
68    pub use crate::operator::*;
69}
70
71/// Explicit serverless adapter surface layered over the multi-target family.
72pub mod serverless {
73    pub use crate::serverless::*;
74}
75
76/// Explicit Snap adapter surface layered over the multi-target family.
77pub mod snap {
78    pub use crate::snap::*;
79}
80
81/// Explicit terraform adapter surface layered over the multi-target family.
82pub mod terraform {
83    pub use crate::terraform::*;
84}
85
86#[cfg(test)]
87mod tests {
88    use super::*;
89    use crate as greentic_deployer;
90
91    #[test]
92    fn surface_single_vm_namespace_exposes_types() {
93        let _ = std::mem::size_of::<single_vm::SingleVmPlanOutput>();
94        let _ = std::mem::size_of::<single_vm::SingleVmStatusReport>();
95    }
96
97    #[test]
98    fn surface_multi_target_namespace_exposes_types() {
99        let _ = std::mem::size_of::<multi_target::OperationResult>();
100        let _ = std::mem::size_of::<multi_target::PlanPayload>();
101    }
102
103    #[test]
104    fn surface_aws_namespace_exposes_types() {
105        let _ = std::mem::size_of::<aws::AwsRequest>();
106    }
107
108    #[test]
109    fn surface_azure_namespace_exposes_types() {
110        let _ = std::mem::size_of::<azure::AzureRequest>();
111    }
112
113    #[test]
114    fn surface_gcp_namespace_exposes_types() {
115        let _ = std::mem::size_of::<gcp::GcpRequest>();
116    }
117
118    #[test]
119    fn surface_helm_namespace_exposes_types() {
120        let _ = std::mem::size_of::<helm::HelmRequest>();
121    }
122
123    #[test]
124    fn surface_juju_k8s_namespace_exposes_types() {
125        let _ = std::mem::size_of::<juju_k8s::JujuK8sRequest>();
126    }
127
128    #[test]
129    fn surface_juju_machine_namespace_exposes_types() {
130        let _ = std::mem::size_of::<juju_machine::JujuMachineRequest>();
131    }
132
133    #[test]
134    fn surface_k8s_raw_namespace_exposes_types() {
135        let _ = std::mem::size_of::<k8s_raw::K8sRawRequest>();
136    }
137
138    #[test]
139    fn surface_operator_namespace_exposes_types() {
140        let _ = std::mem::size_of::<operator::OperatorRequest>();
141    }
142
143    #[test]
144    fn surface_serverless_namespace_exposes_types() {
145        let _ = std::mem::size_of::<serverless::ServerlessRequest>();
146    }
147
148    #[test]
149    fn surface_snap_namespace_exposes_types() {
150        let _ = std::mem::size_of::<snap::SnapRequest>();
151    }
152
153    #[test]
154    fn surface_terraform_namespace_exposes_types() {
155        let _ = std::mem::size_of::<terraform::TerraformRequest>();
156    }
157
158    #[test]
159    fn top_level_multi_target_exports_remain_available() {
160        let _ = std::mem::size_of::<greentic_deployer::OperationResult>();
161        let _ = std::mem::size_of::<greentic_deployer::PlanPayload>();
162    }
163}