csv 0.12.16

CSV parsing with automatic type based decoding and encoding.
#![feature(path)]

extern crate csv;
extern crate "rustc-serialize" as rustc_serialize;

use std::old_path::Path;

#[allow(dead_code)]
#[derive(RustcDecodable)]
struct Play {
    gameid: String,
    qtr: u32,
    min: Option<u32>,
    sec: Option<u32>,
    team_off: String,
    team_def: String,
    down: Option<u32>,
    togo: Option<u32>,
    ydline: Option<u32>,
    description: String,
    offscore: u32,
    defscore: u32,
    season: u32,
}

fn main() {
    let fp = &Path::new("./data/2012_nfl_pbp_data.csv");

    let mut dec = csv::Reader::from_file(fp);
    match dec.decode::<Play>().collect::<Result<Vec<_>, _>>() {
        Err(err) => panic!("{}", err),
        Ok(plays) => {
            println!("Found {} plays.", plays.len());

            let tfb = plays.iter().find(|&p| {
                "NE" == p.team_off && "DEN" == p.team_def
                && p.description.contains("TOUCHDOWN")
                && p.description.contains("T.Brady")
            }).unwrap();
            println!("Tom Brady touchdown: {}", tfb.description);
        }
    }
}