use std::sync::Arc;
use multiio::{
ErrorPolicy, FormatKind, InMemorySink, InMemorySource, InputSpec, IoEngine, OutputSpec,
default_registry,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, PartialEq)]
struct Data {
id: u32,
message: String,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let registry = default_registry();
let json_data = r#"{"id": 42, "message": "Hello, multiio!"}"#;
let input_source = Arc::new(InMemorySource::from_string("test-input", json_data));
let output_sink = Arc::new(InMemorySink::new("test-output"));
let input_spec = InputSpec::new("test-input", input_source).with_format(FormatKind::Json);
let output_spec =
OutputSpec::new("test-output", output_sink.clone()).with_format(FormatKind::Json);
let engine = IoEngine::new(
registry,
ErrorPolicy::FastFail,
vec![input_spec],
vec![output_spec],
);
let data: Vec<Data> = engine.read_all()?;
println!("Read data: {:?}", data);
engine.write_all(&data)?;
let output_contents = output_sink.contents_string();
println!("Output:\n{}", output_contents);
Ok(())
}