Skip to content

Commit 9b4d720

Browse files
committed
feat: OpenMeteo class dwd implementation
1 parent adde279 commit 9b4d720

1 file changed

Lines changed: 45 additions & 2 deletions

File tree

lib/src/main/kotlin/com/openmeteo/api/OpenMeteo.kt

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import com.openmeteo.api.common.units.PrecipitationUnit
1515
import com.openmeteo.api.common.units.TemperatureUnit
1616
import com.openmeteo.api.common.units.Unit
1717
import com.openmeteo.api.common.units.WindSpeedUnit
18+
import com.openmeteo.api.dwd.Dwd
19+
import com.openmeteo.api.dwd.DwdHourly
20+
import com.openmeteo.api.dwd.DwdDaily
1821
import com.openmeteo.api.ecmwf.Ecmwf
1922
import com.openmeteo.api.ecmwf.EcmwfHourly
2023
import com.openmeteo.api.elevation.Elevation
@@ -57,6 +60,7 @@ class OpenMeteo(
5760

5861
class Endpoints(
5962
val airQuality: Endpoint = Endpoint(AirQuality.context),
63+
val dwd: Endpoint = Endpoint(Dwd.context),
6064
val ecmwf: Endpoint = Endpoint(Ecmwf.context),
6165
val elevation: Endpoint = Endpoint(Elevation.context),
6266
val forecast: Endpoint = Endpoint(Forecast.context),
@@ -79,6 +83,9 @@ class OpenMeteo(
7983
operator fun invoke(query: AirQuality.Query) =
8084
endpoints.airQuality.query<AirQuality.Response>(query)
8185

86+
operator fun invoke(query: Dwd.Query) =
87+
endpoints.dwd.query<Dwd.Response>(query)
88+
8289
operator fun invoke(query: Ecmwf.Query) =
8390
endpoints.ecmwf.query<Ecmwf.Response>(query)
8491

@@ -119,6 +126,27 @@ class OpenMeteo(
119126
)
120127
)
121128

129+
fun dwd(
130+
hourly: Iterable<DwdHourly>? = null,
131+
daily: Iterable<DwdDaily>? = null,
132+
currentWeather: Boolean? = null,
133+
temperatureUnit: TemperatureUnit? = null,
134+
windSpeedUnit: WindSpeedUnit? = null,
135+
precipitationUnit: PrecipitationUnit? = null,
136+
timeZone: TimeZone? = null,
137+
startDate: Date? = null,
138+
endDate: Date? = null,
139+
pastDays: Int? = null,
140+
latitude: Float = this.latitude,
141+
longitude: Float = this.longitude,
142+
) = invoke(
143+
Dwd.Query(
144+
latitude, longitude, hourly, daily, currentWeather,
145+
temperatureUnit, windSpeedUnit, precipitationUnit, timeZone, startDate,
146+
endDate, pastDays
147+
)
148+
)
149+
122150
fun ecmwf(
123151
hourly: Iterable<EcmwfHourly>? = null,
124152
temperatureUnit: TemperatureUnit? = null,
@@ -295,6 +323,17 @@ class OpenMeteo(
295323
).getOrThrow()
296324
}
297325

326+
val dwdHourly = separate<DwdHourly>(hourly)
327+
val dwdDaily = separate<DwdDaily>(daily)
328+
// if both are null return null, else return hourly *or* daily
329+
val dwdResponse = (dwdHourly ?: dwdDaily)?.let {
330+
dwd(
331+
dwdHourly, dwdDaily, currentWeather,
332+
temperatureUnit, windSpeedUnit, precipitationUnit, timeZone,
333+
startDate, endDate, pastDays, latitude, longitude
334+
).getOrThrow()
335+
}
336+
298337
val ecmwfHourly = separate<EcmwfHourly>(hourly)
299338
val ecmwfResponse = ecmwfHourly?.let {
300339
ecmwf(
@@ -345,6 +384,7 @@ class OpenMeteo(
345384

346385
val hourlyResponses: List<ResponseHourly> = listOfNotNull(
347386
airQualityResponse,
387+
dwdResponse,
348388
ecmwfResponse,
349389
forecastResponse,
350390
gfsResponse,
@@ -353,6 +393,7 @@ class OpenMeteo(
353393
)
354394

355395
val dailyResponses: List<ResponseDaily> = listOfNotNull(
396+
dwdResponse,
356397
forecastResponse,
357398
gfsResponse,
358399
historicalResponse,
@@ -366,10 +407,12 @@ class OpenMeteo(
366407
if (responses.isEmpty())
367408
throw Error("No request was performed! No valid option")
368409

369-
val elevation = forecastResponse?.elevation
410+
val elevation = dwdResponse?.elevation
411+
?: forecastResponse?.elevation
370412
?: gfsResponse?.elevation
371413

372-
val currentWeather0 = forecastResponse?.currentWeather
414+
val currentWeather0 = dwdResponse?.currentWeather
415+
?: forecastResponse?.currentWeather
373416
?: gfsResponse?.currentWeather
374417

375418
val utcOffsetSeconds = hourlyResponses[0].utcOffsetSeconds

0 commit comments

Comments
 (0)