From b920f7aa8c685aea5abebe978e6e3e7304c19169 Mon Sep 17 00:00:00 2001 From: Tony Bark <35226681+tonytins@users.noreply.github.com> Date: Sat, 22 Aug 2026 16:49:54 -0400 Subject: [PATCH] Wrote most of the client functions --- Sources/AmtrakStatus/AmtrakClient.swift | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Sources/AmtrakStatus/AmtrakClient.swift b/Sources/AmtrakStatus/AmtrakClient.swift index ec60e44..70fbb70 100644 --- a/Sources/AmtrakStatus/AmtrakClient.swift +++ b/Sources/AmtrakStatus/AmtrakClient.swift @@ -14,6 +14,36 @@ struct AmtrakClient { let trainsBaseURL = "https://api.amtraker.com/v3/trains" let staleBaseURL = "https://api.amtraker.com/v3/stale" + func fetchTrain(number trainid: String) async throws -> TrainResponse { + try await get("\(trainsBaseURL)/\(trainid)") + } + + func fetchAllTrains() async throws -> TrainResponse { + try await get(trainsBaseURL) + } + + func fetchStation(code stationid: String) async throws -> StationResponse { + try await get("\(stationBaseURL)/\(stationid)") + } + + func fetchAllStations() async throws -> StationResponse { + try await get(stationBaseURL) + } + + func trainNumber(fromTrainId trainId: String) -> String { + trainId.split(separator: "-").first.map(String.init) ?? trainId + } + + func fetchStationTrainNumbers(stationCode code: String) async throws -> [String] { + let reponse = try await fetchStation(code: code) + + guard let meta = reponse[code] else { + throw AmtrakError.stationNotFound(code) + } + + return Array(Set(meta.trains.map(trainNumber(fromTrainId:)))) + } + func get(_ urlString: String) async throws -> T { guard let url = URL(string: urlString) else {