Skip to content

Commit

Permalink
feat: scoped query and invoke single call
Browse files Browse the repository at this point in the history
Cleans implementation code:
```kotlin
Forecast(City.Amsterdam) {
    hourly = Forecast.Hourly { listOf(
        temperature2m, precipitation
    ) }
    currentWeather = true
}.getOrThrow().run {
    println(currentWeather!!.weatherCode.message)
}
```
  • Loading branch information
DadiBit committed Jun 11, 2023
1 parent 2d50ed8 commit 6d4e943
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 0 deletions.
17 changes: 17 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/AirQuality.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.openmeteo.api

import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.Units
Expand All @@ -18,6 +19,22 @@ object AirQuality : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down
23 changes: 23 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/ClimateChange.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.openmeteo.api
import com.openmeteo.api.common.CellSelection
import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.PrecipitationUnit
Expand All @@ -22,6 +23,28 @@ object ClimateChange : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
models: String,
startDate: Date,
endDate: Date,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, models, startDate, endDate, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
models: String,
startDate: Date,
endDate: Date,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude, models, startDate, endDate).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down
17 changes: 17 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/Ensemble.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.openmeteo.api
import com.openmeteo.api.common.CellSelection
import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.PrecipitationUnit
Expand All @@ -22,6 +23,22 @@ object Ensemble : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down
17 changes: 17 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/Flood.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.openmeteo.api
import com.openmeteo.api.common.CellSelection
import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.Units
Expand All @@ -19,6 +20,22 @@ object Flood : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down
17 changes: 17 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/Forecast.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.openmeteo.api.common.CellSelection
import com.openmeteo.api.common.CurrentWeather
import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.PrecipitationUnit
Expand All @@ -23,6 +24,22 @@ object Forecast : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down
9 changes: 9 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/GeocodingGet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ object GeocodingGet : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
id: Int,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(id).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
var id: Int,
Expand Down
9 changes: 9 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/GeocodingSearch.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ object GeocodingSearch : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
name: String,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(name).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
var name: String,
Expand Down
17 changes: 17 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/Historical.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.openmeteo.api.common.CellSelection
import com.openmeteo.api.common.CurrentWeather
import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.PrecipitationUnit
Expand All @@ -23,6 +24,22 @@ object Historical : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down
17 changes: 17 additions & 0 deletions lib/src/main/kotlin/com/openmeteo/api/Marine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.openmeteo.api
import com.openmeteo.api.common.CellSelection
import com.openmeteo.api.common.Options
import com.openmeteo.api.common.http.Endpoint
import com.openmeteo.api.common.query.City
import com.openmeteo.api.common.time.Date
import com.openmeteo.api.common.time.Timezone
import com.openmeteo.api.common.units.LengthUnit
Expand All @@ -20,6 +21,22 @@ object Marine : Endpoint(
operator fun invoke(query: Query, context: URL = this.context) =
query<Response, Query>(query, context)

operator fun invoke(
city: City,
context: URL = this.context,
query: Query.() -> Unit,
) = this(city.latitude, city.longitude, context, query)

operator fun invoke(
latitude: Float,
longitude: Float,
context: URL = this.context,
query: Query.() -> Unit,
) = Query(latitude, longitude).let {
it.query()
this(it, context)
}

@Serializable
open class Query(
override var latitude: Float,
Expand Down

0 comments on commit 6d4e943

Please sign in to comment.