use serde_json::Value;
use crate::pipeline::{NodeMetadataById, PipelineFileResult, PipelineResult};
use super::NodeExecutionResult;
use super::node_outputs::NodeRecords;
pub(super) fn build_pipeline_result(
result: NodeExecutionResult,
duration_ms: u64,
) -> PipelineResult {
let files = result
.output_files
.into_iter()
.map(|f| PipelineFileResult {
name: f.name,
data: f.data,
mime_type: f.mime_type,
metadata: f.metadata,
})
.collect();
PipelineResult {
files,
duration_ms,
warnings: result.warnings,
node_metadata: node_metadata(result.node_outputs),
}
}
fn node_metadata(records: NodeRecords) -> NodeMetadataById {
records
.into_iter()
.filter_map(|(id, record)| match record {
Value::Object(metadata) => Some((id, metadata)),
_ => None,
})
.collect()
}