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>> + 'aExpand 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(())
}