@@ -15,6 +15,9 @@ import com.openmeteo.api.common.units.PrecipitationUnit
1515import com.openmeteo.api.common.units.TemperatureUnit
1616import com.openmeteo.api.common.units.Unit
1717import 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
1821import com.openmeteo.api.ecmwf.Ecmwf
1922import com.openmeteo.api.ecmwf.EcmwfHourly
2023import 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