lightshuttle_export/
lower.rs1use lightshuttle_manifest::Manifest;
4use lightshuttle_spec::from_resource;
5
6use crate::error::{ExportError, Result};
7use crate::model::{ExportModel, ExportProject, ExportService};
8
9pub fn lower(manifest: &Manifest) -> Result<ExportModel> {
21 let project = ExportProject {
22 name: manifest.project.name.clone(),
23 version: manifest.project.version.clone(),
24 };
25
26 let mut services = Vec::with_capacity(manifest.resources.len());
27 for (name, kind) in &manifest.resources {
28 let resolved = from_resource(&manifest.project.name, name, kind).map_err(|source| {
29 ExportError::Spec {
30 resource: name.clone(),
31 source,
32 }
33 })?;
34 services.push(ExportService {
35 spec: resolved.spec,
36 depends_on: kind.depends_on().to_vec(),
37 });
38 }
39
40 Ok(ExportModel {
41 project,
42 services,
43 export: manifest.export.clone(),
44 })
45}