Skip to content

Commit 352bfcc

Browse files
committed
feat(apix): marine api
1 parent 6d90c7d commit 352bfcc

2 files changed

Lines changed: 75 additions & 0 deletions

File tree

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.openmeteo.apix.geocoding.GeocodingGet
1717
import com.openmeteo.apix.geocoding.GeocodingSearch
1818
import com.openmeteo.apix.gfs.Gfs
1919
import com.openmeteo.apix.historical.Historical
20+
import com.openmeteo.apix.marine.Marine
2021

2122
class OpenMeteo(
2223
override val latitude: Float = 0f,
@@ -29,6 +30,7 @@ class OpenMeteo(
2930
val geocodingSearch: Endpoint = Endpoint(GeocodingSearch.context),
3031
val gfs: Endpoint = Endpoint(Gfs.context),
3132
val historical: Endpoint = Endpoint(Historical.context),
33+
val marine: Endpoint = Endpoint(Marine.context),
3234
) : QueryCoordinates {
3335

3436
constructor(coordinates: Pair<Float, Float>) : this(
@@ -70,6 +72,9 @@ class OpenMeteo(
7072
operator fun invoke(query: Historical.Query) =
7173
historical.query<Historical.Response>(query)
7274

75+
operator fun invoke(query: Marine.Query) =
76+
marine.query<Marine.Response>(query)
77+
7378
fun airQuality(
7479
latitude: Float = this.latitude,
7580
longitude: Float = this.longitude,
@@ -159,4 +164,15 @@ class OpenMeteo(
159164
) = invoke(Historical.Query(latitude, longitude, hourly, daily, temperatureUnit,
160165
windSpeedUnit, precipitationUnit, timeZone, startDate, endDate))
161166

167+
fun marine(
168+
latitude: Float = this.latitude,
169+
longitude: Float = this.longitude,
170+
hourly: Iterable<com.openmeteo.apix.marine.Hourly>? = null,
171+
daily: Iterable<com.openmeteo.apix.marine.Daily>? = null,
172+
timeZone: TimeZone? = null,
173+
startDate: Date? = null,
174+
endDate: Date? = null,
175+
) = invoke(Marine.Query(latitude, longitude, hourly, daily, timeZone, startDate,
176+
endDate))
177+
162178
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.openmeteo.apix.marine
2+
3+
import com.openmeteo.apix.common.query.*
4+
import com.openmeteo.apix.common.response.ResponseCoordinates
5+
import com.openmeteo.apix.common.response.ResponseDaily
6+
import com.openmeteo.apix.common.response.ResponseGenerationTimed
7+
import com.openmeteo.apix.common.response.ResponseHourly
8+
import com.openmeteo.apix.common.time.Date
9+
import com.openmeteo.apix.common.time.TimeZone
10+
import com.openmeteo.apix.common.units.Unit
11+
import kotlinx.serialization.SerialName
12+
import kotlinx.serialization.Serializable
13+
import java.net.URL
14+
15+
object Marine {
16+
17+
val context = URL("https://marine-api.open-meteo.com/v1/marine")
18+
19+
class Query(
20+
override val latitude: Float,
21+
override val longitude: Float,
22+
override val hourly: Iterable<Hourly>? = null,
23+
override val daily: Iterable<Daily>? = null,
24+
override val timeZone: TimeZone? = null,
25+
override val startDate: Date? = null,
26+
override val endDate: Date? = null,
27+
@SerialName("past_days")
28+
val pastDays: Int? = null,
29+
) : QueryCoordinates,
30+
QueryHourly,
31+
QueryDaily,
32+
QueryDateRange
33+
34+
@Serializable
35+
class Response(
36+
override val latitude: Float,
37+
override val longitude: Float,
38+
@SerialName("utc_offset_seconds")
39+
override val utcOffsetSeconds: Int,
40+
@SerialName("timezone")
41+
override val timeZone: TimeZone,
42+
@SerialName("timezone_abbreviation")
43+
override val timeZoneAbbreviation: String,
44+
@SerialName("hourly_units")
45+
override val hourlyUnits: Map<Hourly, Unit>? = null,
46+
@SerialName("hourly")
47+
override val hourlyValues: Map<Hourly, Array<Double?>>? = null,
48+
@SerialName("daily_units")
49+
override val dailyUnits: Map<Daily, Unit>? = null,
50+
@SerialName("daily")
51+
override val dailyValues: Map<Daily, Array<Double?>>? = null,
52+
@SerialName("generationtime_ms")
53+
override val generationTimeMs: Float,
54+
) : ResponseCoordinates,
55+
ResponseHourly<Hourly>,
56+
ResponseDaily<Daily>,
57+
ResponseGenerationTimed
58+
59+
}

0 commit comments

Comments
 (0)