Rustでcsv deserialize してstruct配列を取得する

deserializeはcsv::DeserializeRecordsIterを返却するので、collectすると取得できる。

型を指定してcollectしないと

consider specifying the type argument in the method call

のエラーが出る。

extern crate csv;
#[macro_use]
extern crate serde_derive;

use csv::ReaderBuilder;
use std::error::Error;

#[derive(Debug, Deserialize, Eq, PartialEq)]
struct Row {
    label: String,
    value: Vec<i32>,
}

fn example() -> Result<(), Box<dyn Error>> {
    let data = "\
label,value1,value2
l1,2,4
l2,2,4
";
    let mut rdr = ReaderBuilder::new()
        .has_headers(false)
        .from_reader(data.as_bytes());
    // skip since header 1
    let mut data = rdr.deserialize().skip(1).collect::<Result<Vec<(Row)>, _>>().unwrap();
    println!("{:?}", data);
    Ok(())
}

fn main() {
    example();
}