diff --git a/src/main.rs b/src/main.rs
index ac2946c..e7f84ec 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -22,7 +22,7 @@ impl EventHandler for Handler {
dest_1: String::from("Hannover/Wettbergen"),
dest_2: String::from("Hannover/Misburg"),
headline: String::from("Linie 7 fährt erst bzw. bis Haltestelle In den Sieben Stücken"),
- detail: String::from("Die Stadtbahnlinie 7 fährt während der Baumaßnahme erst ab beziehungsweise bis zur Haltestelle In den Sieben Stücken. Dort besteht die Umsteigemöglichkeit vom bzw. in den Schienenersatzverkehr (SEV) und die Stadtbahnlinien 3 und 13. An der Haltestelle Buchholz/Betriebshof ist kein Zustieg bzw. Ausstieg möglich."),
+ detail: String::from("Gültig ab 27.07.2026 07:00 bis 13.08.2026 02:59
Aufgrund von Bauarbeiten kommt es in der Zeit von Montag, 27.07.2026, ca. 07:00 Uhr bis Donnerstag, 13.08.2026, ca. 02:59 Uhr an der Haltestelle Hannover, Stadionbrücke zu Einschränkungen.
Die Haltestelle Hannover, Stadionbrücke der Linien in Fahrtrichtung:
• Linie 3 - Altwarmbüchen
• Linie 7 - Hannover/Misburg
• Linie 13 - Hannover/Fasanenkrug
• Linie 17 - Hannover Hauptbahnhof/ZOB
wird nicht bedient.
Wir bitten um Ihr Verständnis."),
from: None,
to: None,
last_modified: String::from("2026-07-24T13:37:00Z"),
diff --git a/src/models.rs b/src/models.rs
index a80fcf1..b281c10 100644
--- a/src/models.rs
+++ b/src/models.rs
@@ -39,24 +39,33 @@ impl Notice {
pub fn get_validity_period(&mut self) {
let re = Regex::new(
- r"Gültig ab (\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}) bis (\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})",
+ r"Gültig ab (\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})(?: bis (\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}))?(?:
|\s)*",
)
.unwrap();
+ let format = "%d.%m.%Y %H:%M";
+
if let Some(caps) = re.captures(&self.detail) {
let valid_from = caps.get(1).unwrap().as_str();
- let valid_to = caps.get(1).unwrap().as_str();
- let format = "%d.%m.%Y %H:%M";
-
- if let (Ok(start_dt), Ok(end_dt)) = (
- NaiveDateTime::parse_from_str(valid_from, format),
- NaiveDateTime::parse_from_str(valid_to, format),
- ) {
+ if let Ok(start_dt) = NaiveDateTime::parse_from_str(valid_from, format) {
self.from = Some(start_dt);
- self.to = Some(end_dt);
+ }
+
+ if let Some(valid_to_match) = caps.get(2) {
+ let valid_to = valid_to_match.as_str();
+ if let Ok(end_dt) = NaiveDateTime::parse_from_str(valid_to, format) {
+ self.to = Some(end_dt);
+ }
+ self.detail = re.replace(&self.detail, "").to_string();
+ self.trim();
+ } else {
+ self.to = None;
}
} else {
println!("No validity period found in the text.");
}
}
+ pub fn trim(&mut self) {
+ self.detail = self.detail.replace("
", "\n");
+ }
}