Files
weatherreporter/internal/briefing/spc_convective_outlook_definitions.go

56 lines
1.8 KiB
Go

package briefing
import (
"embed"
"encoding/json"
"fmt"
"strings"
)
//go:embed assets/spc_convective_outlook_definitions.json
var spcConvectiveOutlookDefinitionAssets embed.FS
var spcOutlookBackgroundDefinitions = mustLoadSPCOutlookBackgroundDefinitions()
func mustLoadSPCOutlookBackgroundDefinitions() map[string]SPCOutlookBackgroundDefinition {
data, err := spcConvectiveOutlookDefinitionAssets.ReadFile("assets/spc_convective_outlook_definitions.json")
if err != nil {
panic(fmt.Sprintf("read embedded SPC outlook definitions: %v", err))
}
var asset spcOutlookBackgroundDefinitionAsset
if err := json.Unmarshal(data, &asset); err != nil {
panic(fmt.Sprintf("decode embedded SPC outlook definitions: %v", err))
}
return asset.Definitions
}
type spcOutlookBackgroundDefinitionAsset struct {
Provenance spcOutlookDefinitionProvenance `json:"provenance"`
Definitions map[string]SPCOutlookBackgroundDefinition `json:"definitions"`
}
type spcOutlookDefinitionProvenance struct {
Sources []spcOutlookDefinitionSource `json:"sources"`
ReviewedOn string `json:"reviewed_on"`
ReviewOwner string `json:"review_owner"`
ReviewSchedule string `json:"review_schedule"`
}
type spcOutlookDefinitionSource struct {
URL string `json:"url"`
UpdatedOn string `json:"updated_on"`
AppliesTo string `json:"applies_to"`
}
func spcOutlookBackgroundDefinition(outlookType string, label string) *SPCOutlookBackgroundDefinition {
definition, ok := spcOutlookBackgroundDefinitions[spcOutlookDefinitionKey(outlookType, label)]
if !ok {
return nil
}
return &definition
}
func spcOutlookDefinitionKey(outlookType string, label string) string {
return strings.ToLower(strings.TrimSpace(outlookType)) + ":" + strings.ToUpper(strings.TrimSpace(label))
}