headerを無視して、deserialize したい場合。 (has_headers falseでskip)

headerを無視して、deserialize したい場合がある。

label,value1,value2
l1,2,4
l2,2,4

で、structは

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

みたいなケースだ。 こういうときはskipを使ってheaderを無視する

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 iter = rdr.deserialize().skip(1);
    for result in iter {
        let record: Row = result?;
        println!("{:?}", record);
    }
    Ok(())
}

fn main() {
    example();
}