Skip to main content

write_compilation_artifacts

Function write_compilation_artifacts 

Source
pub fn write_compilation_artifacts<'a, R: OperatorResolver + ?Sized>(
    resolver: &'a R,
    request: &'a CompilationArtifactWriteRequest,
    result: &'a CompilationResult,
    progress: &'a mut CompilationArtifactWriteProgress,
) -> impl Future<Output = Result<CompilationArtifactWriteReceipt, CompilationArtifactWriteError>> + 'a
Expand description

Writes every canonical artifact beneath the request’s normalized prefix.

The caller-owned progress is cleared synchronously before the returned future can be polled or dropped. Replaying the same result with CreateOrVerify accepts objects whose bytes already match.

use typst_pack::CompilationResult;
use typst_pack::opendal::OperatorBindings;
use typst_pack::opendal::write::{
    CompilationArtifactWriteProgress, CompilationArtifactWriteRequest,
    WritePolicy, write_compilation_artifacts,
};

async fn write_and_replay(
    bindings: &OperatorBindings,
    document_result: &CompilationResult,
    page_result: &CompilationResult,
) -> Result<(), Box<dyn std::error::Error>> {
    let document_request = CompilationArtifactWriteRequest::new(
        document_result,
        "artifacts:/document/".parse()?,
        ["document.pdf"],
        WritePolicy::CreateOrVerify,
    )?;
    let page_keys = page_result
        .artifacts()
        .iter()
        .map(|artifact| format!("page-{}.svg", artifact.source_page_number().unwrap()))
        .collect::<Vec<_>>();
    let page_request = CompilationArtifactWriteRequest::new(
        page_result,
        "artifacts:/pages/".parse()?,
        page_keys,
        WritePolicy::CreateOrVerify,
    )?;

    let mut document_progress = CompilationArtifactWriteProgress::new();
    write_compilation_artifacts(
        bindings,
        &document_request,
        document_result,
        &mut document_progress,
    )
    .await?;
    write_compilation_artifacts(
        bindings,
        &document_request,
        document_result,
        &mut document_progress,
    )
    .await?;

    let mut page_progress = CompilationArtifactWriteProgress::new();
    write_compilation_artifacts(bindings, &page_request, page_result, &mut page_progress)
        .await?;
    write_compilation_artifacts(bindings, &page_request, page_result, &mut page_progress)
        .await?;
    Ok(())
}