56 lines
1.8 KiB
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))
|
|
}
|