package spc import "fmt" const ( OutlookTypeCategorical = "categorical" OutlookTypeTornado = "tornado" OutlookTypeHail = "hail" OutlookTypeWind = "wind" ) // GeoJSONProduct describes one required SPC convective outlook GeoJSON product. type GeoJSONProduct struct { Key string Day int OutlookType string URL string } // DiscussionProduct describes one required SPC convective outlook print page. type DiscussionProduct struct { Key string Day int URL string } var geoJSONProducts = []GeoJSONProduct{ {Key: "day1_categorical", Day: 1, OutlookType: OutlookTypeCategorical, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_cat.nolyr.geojson"}, {Key: "day1_tornado", Day: 1, OutlookType: OutlookTypeTornado, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_torn.nolyr.geojson"}, {Key: "day1_hail", Day: 1, OutlookType: OutlookTypeHail, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_hail.nolyr.geojson"}, {Key: "day1_wind", Day: 1, OutlookType: OutlookTypeWind, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_wind.nolyr.geojson"}, {Key: "day2_categorical", Day: 2, OutlookType: OutlookTypeCategorical, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_cat.nolyr.geojson"}, {Key: "day2_tornado", Day: 2, OutlookType: OutlookTypeTornado, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_torn.nolyr.geojson"}, {Key: "day2_hail", Day: 2, OutlookType: OutlookTypeHail, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_hail.nolyr.geojson"}, {Key: "day2_wind", Day: 2, OutlookType: OutlookTypeWind, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_wind.nolyr.geojson"}, {Key: "day3_categorical", Day: 3, OutlookType: OutlookTypeCategorical, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_cat.nolyr.geojson"}, } var discussionProducts = []DiscussionProduct{ {Key: "day1", Day: 1, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_prt.html"}, {Key: "day2", Day: 2, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_prt.html"}, {Key: "day3", Day: 3, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_prt.html"}, } // GeoJSONProducts returns the required SPC convective outlook GeoJSON products // in stable day/type order. func GeoJSONProducts() []GeoJSONProduct { out := make([]GeoJSONProduct, len(geoJSONProducts)) copy(out, geoJSONProducts) return out } // DiscussionProducts returns the required SPC convective outlook print pages in // stable day order. func DiscussionProducts() []DiscussionProduct { out := make([]DiscussionProduct, len(discussionProducts)) copy(out, discussionProducts) return out } // GeoJSONProductByKey returns product metadata for a configured product key. func GeoJSONProductByKey(key string) (GeoJSONProduct, bool) { for _, product := range geoJSONProducts { if product.Key == key { return product, true } } return GeoJSONProduct{}, false } // DiscussionProductByKey returns discussion metadata for a configured day key. func DiscussionProductByKey(key string) (DiscussionProduct, bool) { for _, product := range discussionProducts { if product.Key == key { return product, true } } return DiscussionProduct{}, false } func validateProductDay(day int) error { if day < 1 || day > 3 { return fmt.Errorf("day must be 1, 2, or 3, got %d", day) } return nil }