A very specific Golang interface to the Dark Sky API for my Chrome Extension
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
3.4 KiB

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"`
}