package main // Timestamp is an int64 timestamp type Timestamp int64 // ForecastRequest contains all available options for requesting a forecast type ForecastRequest struct { Latitude float64 Longitude float64 Time Timestamp Options ForecastRequestOptions } // ForecastRequestOptions are optional and passed as query parameters type ForecastRequestOptions struct { Exclude string `url:"exclude,omitempty"` Extend string `url:"extend,omitempty"` Lang string `url:"lang,omitempty"` Units string `url:"units,omitempty"` } // ForecastResponse is the response containing all requested properties type ForecastResponse struct { Latitude float64 `json:"latitude,omitempty"` Longitude float64 `json:"longitude,omitempty"` Timezone string `json:"timezone,omitempty"` Currently *DataPoint `json:"currently,omitempty"` Minutely *DataBlock `json:"minutely,omitempty"` Hourly *DataBlock `json:"hourly,omitempty"` Daily *DataBlock `json:"daily,omitempty"` Alerts []*Alert `json:"alerts,omitempty"` Flags *Flags `json:"flags,omitempty"` } // DataPoint contains various properties, each representing the average (unless otherwise specified) of a particular weather phenomenon occurring during a period of time. type DataPoint struct { ApparentTemperature float64 `json:"apparentTemperature,omitempty"` ApparentTemperatureHigh float64 `json:"apparentTemperatureHigh,omitempty"` ApparentTemperatureLow float64 `json:"apparentTemperatureLow,omitempty"` Humidity float64 `json:"humidity,omitempty"` Icon string `json:"icon"` MoonPhase float64 `json:"moonPhase,omitempty"` Summary string `json:"summary,omitempty"` SunriseTime Timestamp `json:"sunriseTime,omitempty"` SunsetTime Timestamp `json:"sunsetTime,omitempty"` Temperature float64 `json:"temperature,omitempty"` TemperatureHigh float64 `json:"temperatureHigh"` TemperatureLow float64 `json:"temperatureLow"` TemperatureMax float64 `json:"temperatureMax"` TemperatureMin float64 `json:"temperatureMin"` Time Timestamp `json:"time,omitempty"` Visibility float64 `json:"visibility,omitempty"` WindBearing float64 `json:"windBearing"` WindGust float64 `json:"windGust"` WindSpeed float64 `json:"windSpeed"` } // DataBlock represents the various weather phenomena occurring over a period of time type DataBlock struct { Summary string `json:"summary,omitempty"` Icon string `json:"icon,omitempty"` Data []DataPoint `json:"data,omitempty"` } // Alert contains objects representing the severe weather warnings issued for the requested location by a governmental authority type Alert struct { Title string `json:"title,omitempty"` Severity string `json:"severity,omitempty"` Description string `json:"description,omitempty"` Expires Timestamp `json:"expires,omitempty"` Regions []string `json:"regions,omitempty"` Time Timestamp `json:"time,omitempty"` URI string `json:"uri,omitempty"` } // Flags contains various metadata information related to the request type Flags struct { DarkSkyUnavailable string `json:"darksky-unavailable,omitempty"` Sources []string `json:"sources,omitempty"` Units string `json:"units,omitempty"` }