#![cfg(all(feature = "json", feature = "yaml"))]
use multiio::{ErrorPolicy, MultiioBuilder, PipelineConfig, default_registry};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
struct Record {
name: String,
value: i32,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config_str = r#"
inputs:
- id: config
kind: file
path: "examples/data/config.json"
format: json
outputs:
- id: out
kind: stdout
format: json
error_policy: fast_fail
"#;
let pipeline: PipelineConfig = serde_yaml::from_str(config_str)?;
println!("Pipeline configuration:");
println!(" Inputs: {:?}", pipeline.inputs);
println!(" Outputs: {:?}", pipeline.outputs);
println!(" Error policy: {:?}", pipeline.error_policy);
let registry = default_registry();
let engine = MultiioBuilder::from_pipeline_config(pipeline, registry)?
.with_mode(ErrorPolicy::FastFail)
.build()?;
let records: Vec<Record> = engine.read_all()?;
println!("\nRead {} record(s):", records.len());
for record in &records {
println!(" - {}: {}", record.name, record.value);
}
engine.write_all(&records)?;
Ok(())
}