multiio 0.2.3

A unified I/O orchestration library for CLI/server applications
Documentation
#![cfg(feature = "csv")]

use std::env;
use std::error::Error;

use multiio::{ErrorPolicy, MultiioBuilder};

fn print_usage_and_exit() -> ! {
    eprintln!("Usage: multiio_records_demo <mode> <input>");
    eprintln!("  <mode>: json | csv | auto");
    eprintln!("  <input>: file path or '-' for stdin");
    std::process::exit(1);
}

fn run() -> Result<(), Box<dyn Error>> {
    let mut args = env::args().skip(1);

    let mode = match args.next() {
        Some(m) => m,
        None => return Err("missing <mode> argument (json|csv|auto)".into()),
    };

    let first_input = match args.next() {
        Some(p) => p,
        None => return Err("missing <input> argument".into()),
    };

    let mut inputs = vec![first_input];
    inputs.extend(args);

    let mut builder = MultiioBuilder::default().with_mode(ErrorPolicy::FastFail);
    for input in inputs {
        builder = builder.add_input(input);
    }

    let engine = builder.build()?;

    match mode.as_str() {
        "json" => {
            for res in engine.read_json_records::<serde_json::Value>() {
                let value = res.map_err(|e| format!("record error: {e}"))?;
                println!("{}", serde_json::to_string(&value)?);
            }
        }
        "csv" => {
            for res in engine.read_csv_records::<serde_json::Value>() {
                let value = res.map_err(|e| format!("record error: {e}"))?;
                println!("{}", serde_json::to_string(&value)?);
            }
        }
        "auto" => {
            for res in engine.read_records::<serde_json::Value>() {
                let value = res.map_err(|e| format!("record error: {e}"))?;
                println!("{}", serde_json::to_string(&value)?);
            }
        }
        _ => {
            return Err(format!("unknown mode: {} (expected json|csv|auto)", mode).into());
        }
    }

    Ok(())
}

fn main() {
    if let Err(e) = run() {
        eprintln!("multiio_records_demo error: {e}");
        print_usage_and_exit();
    }
}