diff --git a/Cargo.toml b/Cargo.toml index 8e98337..8a8ae4d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,8 @@ csv = "1.4" gtfs-structures = "0.47" gtfs-realtime = "0.2" log = "0.4" +prost = "0.14" +prost-types = "0.14" reqwest = { version = "0.11", features = ["blocking"] } sdl3 = {version = "0.17", features = ["ttf"]} serde = { version = "1.0", features = ["derive"]} diff --git a/src/gtfs/realtime.rs b/src/gtfs/realtime.rs index 7eb765f..3dec2e9 100644 --- a/src/gtfs/realtime.rs +++ b/src/gtfs/realtime.rs @@ -28,8 +28,13 @@ impl Gtfs<'_> { } // Parse response - let realtime_info: gtfs_realtime::FeedMessage - = serde_json::from_reader(response)?; + let response_bytes= response.bytes()?; + let data: Result = prost::Message::decode(response_bytes.as_ref()); + if data.is_err() { + return Err(Error { + _message : format! ("Error loading realtime prtobuf: {:#?}", data.err().unwrap()) + }) + } // Build a map of (trip, stop) -> Arrival for faster lookup @@ -41,7 +46,9 @@ impl Gtfs<'_> { } // Match deltas to existing arrivals - for entity in realtime_info.entity { + let entities = data.unwrap().entity; + debug!("Loaded {} entities from realtime update.", entities.len()); + for entity in entities { if entity.trip_update.is_some() && entity.stop.is_some() { let trip_update = entity.trip_update.unwrap();