Skip to content

Commit

Permalink
Merge pull request #149 from kylerchin/main
Browse files Browse the repository at this point in the history
allow for train voyages longer than 4.1 days
  • Loading branch information
antoine-de authored Nov 27, 2023
2 parents fc629df + 440b9c3 commit 2449345
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
description = "Read GTFS (public transit timetables) files"
name = "gtfs-structures"
version = "0.37.0"
version = "0.37.1"
authors = ["Tristram Gräbener <[email protected]>", "Antoine Desbordes <[email protected]>"]
repository = "https://github.com/rust-transit/gtfs-structure"
license = "MIT"
Expand Down
29 changes: 23 additions & 6 deletions src/serde_helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,23 @@ pub fn parse_time_impl(h: &str, m: &str, s: &str) -> Result<u32, std::num::Parse
}

pub fn parse_time(s: &str) -> Result<u32, crate::Error> {
let len = s.len();

if s.len() < 7 || s.len() > 8 {
if s.len() < 7 {
Err(crate::Error::InvalidTime(s.to_owned()))
} else {
let sec = &s[len - 2..];
let min = &s[len - 5..len - 3];
let hour = &s[..len - 6];
let parts: Vec<&str> = s.split(':').collect();

if parts.len() != 3 {
return Err(crate::Error::InvalidTime(s.to_owned()));
}

let sec = parts[2];
let min = parts[1];
let hour = parts[0];

if min.len() != 2 || sec.len() != 2 {
return Err(crate::Error::InvalidTime(s.to_owned()));
}

parse_time_impl(hour, min, sec).map_err(|_| crate::Error::InvalidTime(s.to_owned()))
}
}
Expand Down Expand Up @@ -221,6 +230,14 @@ fn test_serialize_time() {
.unwrap();
assert_eq!(3600 + 60 + 1, parsed.time);

let data_in_long_ride = "time\n172:35:42\n";
let parsed_long_ride: Test = csv::Reader::from_reader(data_in_long_ride.as_bytes())
.deserialize()
.next()
.unwrap()
.unwrap();
assert_eq!((172 * 3600) + (35 * 60) + 42, parsed_long_ride.time);

let mut wtr = csv::Writer::from_writer(vec![]);
wtr.serialize(parsed).unwrap();
let data_out = String::from_utf8(wtr.into_inner().unwrap()).unwrap();
Expand Down

0 comments on commit 2449345

Please sign in to comment.