Skip to content

Commit 5a9a173

Browse files
committed
feat(apix): wmo weather codes
1 parent be37a36 commit 5a9a173

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.openmeteo.apix.common.weather
2+
3+
import kotlinx.serialization.Serializable
4+
5+
/**
6+
* A list of "wmo code"s, following [the official docs](https://open-meteo.com/en/docs#api_form)
7+
*/
8+
@Serializable(with = WeatherCodeSerializer::class)
9+
enum class WeatherCode(val code: Short, val message: String) {
10+
UNKNOWN(-1, "Unknown"), // fallback
11+
CLEAR_SKY(0, "Clear sky"),
12+
MAINLY_CLEAR(1, "Mainly clear"),
13+
PARTLY_CLOUDY(2, "Partly cloudy"),
14+
OVERCAST(3, "Overcast"),
15+
FOG(45, "Fog"),
16+
DEPOSITING_RIME_FOG(48, "Depositing rime fog"),
17+
DRIZZLE_LIGHT(51, "Light intensity drizzle"),
18+
DRIZZLE_MODERATE(53, "Moderate intensity drizzle"),
19+
DRIZZLE_DENSE(55, "Dense intensity drizzle"),
20+
FREEZING_DRIZZLE_LIGHT(56, "Light intensity freezing drizzle"),
21+
FREEZING_DRIZZLE_DENSE(57, "Dense intensity freezing drizzle"),
22+
RAIN_SLIGHT(61, "Slight intensity rain"),
23+
RAIN_MODERATE(63, "Moderate intensity rain"),
24+
RAIN_HEAVY(65, "Heavy intensity rain"),
25+
FREEZING_RAIN_LIGHT(66, "Light intensity freezing rain"),
26+
FREEZING_RAIN_HEAVY(67, "Dense intensity freezing rain"),
27+
SNOW_FALL_SLIGHT(71, "Slight intensity snow fall"),
28+
SNOW_FALL_MODERATE(73, "Moderate intensity snow fall"),
29+
SNOW_FALL_HEAVY(75, "Heavy intensity snow fall"),
30+
SNOW_GRAINS(77, "Snow grains"),
31+
RAIN_SHOWERS_SLIGHT(80, "Slight rain showers"),
32+
RAIN_SHOWERS_MODERATE(81, "Moderate rain showers"),
33+
RAIN_SHOWERS_VIOLENT(82, "Violent rain showers"),
34+
SNOW_SHOWERS_SLIGHT(85, "Slight snow showers"),
35+
SNOW_SHOWERS_HEAVY(86, "Heavy snow showers"),
36+
THUNDERSTORM_SLIGHT(95, "Slight or moderate thunderstorm"),
37+
THUNDERSTORM_SLIGHT_HAIL(96, "Thunderstorm with slight hail"),
38+
THUNDERSTORM_HEAVY_HAIL(99, "Thunderstorm with heavy hail");
39+
40+
override fun toString(): String = message
41+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.openmeteo.apix.common.weather
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.descriptors.PrimitiveKind
5+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
10+
/**
11+
* Serializer of [WeatherCode] values
12+
*/
13+
object WeatherCodeSerializer : KSerializer<WeatherCode> {
14+
override val descriptor: SerialDescriptor =
15+
PrimitiveSerialDescriptor("WeatherCode", PrimitiveKind.SHORT)
16+
17+
override fun serialize(encoder: Encoder, value: WeatherCode) = encoder.encodeShort(value.code)
18+
override fun deserialize(decoder: Decoder): WeatherCode {
19+
val code = decoder.decodeFloat().toInt().toShort()
20+
return WeatherCode.values()
21+
.firstOrNull { it.code == code } ?: WeatherCode.UNKNOWN
22+
}
23+
}

0 commit comments

Comments
 (0)