Skip to main content

pray_core/
render.rs

1use crate::paths::validate_project_relative_path;
2use crate::resolve::ResolvedProject;
3use crate::{PrayError, PrayResult};
4use std::path::PathBuf;
5
6#[derive(Debug, Clone)]
7pub struct RenderedTarget {
8    pub path: PathBuf,
9    pub content: String,
10    pub managed_spans: Vec<crate::lockfile::ManagedSpanRecord>,
11}
12
13pub fn render_project(project: &ResolvedProject) -> PrayResult<Vec<RenderedTarget>> {
14    let mut rendered = Vec::new();
15    for target in &project.manifest.targets {
16        for output in &target.outputs {
17            let relative = validate_project_relative_path(output)?;
18            let rendered_target =
19                crate::render_compose::render_target(project, target, relative.as_path())?;
20            if let Some(max_bytes) = target.max_bytes {
21                let size = rendered_target.content.len() as u64;
22                if size > max_bytes {
23                    return Err(PrayError::Render(format!(
24                        "target `{}` output `{}` is {size} bytes; max_bytes is {max_bytes}",
25                        target.name, output
26                    )));
27                }
28            }
29            rendered.push(rendered_target);
30        }
31    }
32    Ok(rendered)
33}
34
35pub use crate::render_write::{
36    layout_rendered_targets, write_rendered_targets, write_rendered_targets_with_previous_lockfile,
37};
38
39pub use crate::render_provisioned::{
40    expected_provisioned_bytes, materialize_provisioned_exports, planned_provisioned_files,
41    PlannedProvisionedFile,
42};