Fix class name
[rhynodge.git] / src / main / kotlin / net / pterodactylus / rhynodge / webpages / weather / wettercom / HourState.kt
1 package net.pterodactylus.rhynodge.webpages.weather.wettercom
2
3 import com.fasterxml.jackson.annotation.JsonProperty
4 import net.pterodactylus.rhynodge.webpages.weather.WindDirection
5
6 /**
7  * Container for weather conditions of a single hour.
8  *
9  * @author [David ‘Bombe’ Roden](mailto:bombe@pterodactylus.net)
10  */
11 data class HourState(
12         @JsonProperty("hourIndex") val hourIndex: Int,
13         @JsonProperty("temperature") val temperature: Double,
14         @JsonProperty("rainProbability") val rainProbability: Double,
15         @JsonProperty("rainAmount") val rainAmount: Double,
16         @JsonProperty("windDirection") val windDirection: WindDirection,
17         @JsonProperty("windSpeed") val windSpeed: Double,
18         @JsonProperty("description") val description: String,
19         @JsonProperty("image") val image: String) {
20
21     class Builder(private val hourIndex: Int) {
22
23         fun temperature(temperature: Double) = _1(temperature)
24
25         inner class _1(private val temperature: Double) {
26
27             fun rainProbability(rainProbability: Double) = _2(rainProbability)
28
29             inner class _2(private val rainProbability: Double) {
30
31                 fun rainAmount(rainAmount: Double) = _3(rainAmount)
32
33                 inner class _3(private val rainAmount: Double) {
34
35                     fun windFrom(windDirection: WindDirection) = _4(windDirection);
36
37                     inner class _4(private val windDirection: WindDirection) {
38
39                         fun at(windSpeed: Double) = _5(windSpeed)
40
41                         inner class _5(private val windSpeed: Double) {
42
43                             fun describedAs(description: String) = _6(description)
44
45                             inner class _6(private val description: String) {
46
47                                 fun withImage(imageUrl: String) = _7(imageUrl)
48
49                                 inner class _7(private val imageUrl: String) {
50
51                                     fun build(): HourState {
52                                         return HourState(hourIndex, temperature, rainProbability, rainAmount, windDirection, windSpeed, description, imageUrl)
53                                     }
54
55                                 }
56
57                             }
58
59                         }
60
61                     }
62
63                 }
64
65             }
66
67         }
68
69     }
70
71     companion object {
72
73         fun atHour(hourIndex: Int) = Builder(hourIndex)
74
75     }
76
77 }