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)) }