1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
use importer::serde::{Deserialize, Deserializer}; use importer::serde_de; use std::str::FromStr; #[derive(Debug, Deserialize)] pub struct TripCSV { pub route_id: String, pub service_id: String, pub trip_id: String, pub trip_headsign: Option<String>, pub trip_short_name: Option<String>, pub direction_id: Option<i32>, pub block_id: Option<String>, pub shape_id: Option<String>, pub wheelchair_accessible: Option<String>, pub bikes_allowed: Option<String>, } fn i32_def<'de, D>(des: D) -> Result<Option<i32>, D::Error> where D: Deserializer<'de>, { println!("Deserializing"); match String::deserialize(des) { Ok(v) => { let value = v.parse::<i32>(); if value.is_ok() { return Ok(Some(value.unwrap())); } else { return Ok(Some(0)); } } Err(e) => Ok(Option::None), } }