86 lines
3.9 KiB
Go
86 lines
3.9 KiB
Go
package briefing
|
|
|
|
type factRequirementCategory string
|
|
|
|
const (
|
|
collectedFactRequirement factRequirementCategory = "collected"
|
|
derivedFactRequirement factRequirementCategory = "derived"
|
|
)
|
|
|
|
type factRequirement struct {
|
|
identity string
|
|
category factRequirementCategory
|
|
available func(ModuleContext) bool
|
|
}
|
|
|
|
func (r factRequirement) String() string {
|
|
return r.identity
|
|
}
|
|
|
|
var (
|
|
currentConditionsRequirement = &factRequirement{identity: "collected.current_conditions", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.Current != nil
|
|
}}
|
|
narrativeForecastRequirement = &factRequirement{identity: "collected.narrative_forecast", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.Narrative != nil
|
|
}}
|
|
hourlyForecastRequirement = &factRequirement{identity: "collected.hourly_forecast", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.Hourly != nil
|
|
}}
|
|
alertsRequirement = &factRequirement{identity: "collected.alerts", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.Alerts != nil
|
|
}}
|
|
discussionRequirement = &factRequirement{identity: "collected.discussion", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.Discussion != nil
|
|
}}
|
|
weatherStoryRequirement = &factRequirement{identity: "collected.weather_story", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.WeatherStory != nil
|
|
}}
|
|
spcOutlooksRequirement = &factRequirement{identity: "collected.spc_convective_outlooks", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Collected.SPCConvectiveOutlooks != nil
|
|
}}
|
|
sourceMetadataRequirement = &factRequirement{identity: "collected.source_metadata", category: collectedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return len(ctx.Collected.SourceProvenance) > 0 || len(ctx.Collected.SourceWarnings) > 0
|
|
}}
|
|
|
|
hourlyPeriodsRequirement = &factRequirement{identity: "derived.hourly_periods", category: derivedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return len(ctx.Derived.ValidPeriodHourlyPeriods) > 0
|
|
}}
|
|
narrativePeriodsRequirement = &factRequirement{identity: "derived.narrative_periods", category: derivedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return len(ctx.Derived.ValidPeriodNarrativePeriods) > 0
|
|
}}
|
|
alertOverlapsRequirement = &factRequirement{identity: "derived.alert_overlaps", category: derivedFactRequirement, available: func(ModuleContext) bool {
|
|
return true
|
|
}}
|
|
dailySummariesRequirement = &factRequirement{identity: "derived.daily_summaries", category: derivedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return len(ctx.Derived.DailySummaries) > 0
|
|
}}
|
|
daypartSummariesRequirement = &factRequirement{identity: "derived.daypart_summaries", category: derivedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return len(ctx.Derived.DaypartSummaries) > 0
|
|
}}
|
|
precipTimingRequirement = &factRequirement{identity: "derived.precip_timing", category: derivedFactRequirement, available: func(ModuleContext) bool {
|
|
return true
|
|
}}
|
|
spcDerivedOutlooksRequirement = &factRequirement{identity: "derived.spc_convective_outlooks", category: derivedFactRequirement, available: func(ctx ModuleContext) bool {
|
|
return ctx.Derived.SPCConvectiveOutlooks != nil
|
|
}}
|
|
)
|
|
|
|
var factRequirementVocabulary = []*factRequirement{
|
|
currentConditionsRequirement,
|
|
narrativeForecastRequirement,
|
|
hourlyForecastRequirement,
|
|
alertsRequirement,
|
|
discussionRequirement,
|
|
weatherStoryRequirement,
|
|
spcOutlooksRequirement,
|
|
sourceMetadataRequirement,
|
|
hourlyPeriodsRequirement,
|
|
narrativePeriodsRequirement,
|
|
alertOverlapsRequirement,
|
|
dailySummariesRequirement,
|
|
daypartSummariesRequirement,
|
|
precipTimingRequirement,
|
|
spcDerivedOutlooksRequirement,
|
|
}
|