vrp_cli/extensions/import/
mod.rs

1//! Import command helpers
2
3mod csv;
4pub use self::csv::*;
5
6use std::io::{BufReader, Read};
7use vrp_core::prelude::GenericError;
8use vrp_pragmatic::format::problem::Problem;
9
10/// Imports solution from specific format into pragmatic.
11pub fn import_problem<R: Read>(
12    input_format: &str,
13    readers: Option<Vec<BufReader<R>>>,
14) -> Result<Problem, GenericError> {
15    match (input_format, readers) {
16        ("csv", Some(mut readers)) if readers.len() == 2 => {
17            let jobs = readers.swap_remove(0);
18            let vehicles = readers.swap_remove(0);
19            read_csv_problem(jobs, vehicles).map_err(|err| format!("cannot read csv: {err}").into())
20        }
21        ("csv", _) => Err("csv format expects two files with jobs and vehicles as an input".into()),
22        _ => Err(format!("unknown format: '{input_format}'").into()),
23    }
24}