89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package report
|
|
|
|
import "fmt"
|
|
|
|
type Registry struct {
|
|
definitions map[ID]Definition
|
|
}
|
|
|
|
func DefaultRegistry() Registry {
|
|
definitions := []Definition{
|
|
{
|
|
ID: DailyToday,
|
|
Name: "Daily Report",
|
|
PromptID: "weather.daily_report",
|
|
ComparisonStrategy: CompareSameValidDate,
|
|
DefaultOutputName: "daily.md",
|
|
Morning: true,
|
|
resolve: resolveDailyToday,
|
|
},
|
|
{
|
|
ID: DailyTomorrow,
|
|
Name: "Tomorrow Planning Brief",
|
|
PromptID: "weather.daily_report",
|
|
ComparisonStrategy: CompareSameValidDate,
|
|
DefaultOutputName: "tomorrow.md",
|
|
Evening: true,
|
|
resolve: resolveDailyTomorrow,
|
|
},
|
|
{
|
|
ID: ThreeDay,
|
|
Name: "3-Day Outlook",
|
|
PromptID: "weather.three_day_outlook",
|
|
ComparisonStrategy: CompareSameValidDate,
|
|
DefaultOutputName: "three_day.md",
|
|
Morning: true,
|
|
resolve: resolveThreeDay,
|
|
},
|
|
{
|
|
ID: Weekend,
|
|
Name: "Weekend Outlook",
|
|
PromptID: "weather.weekend_outlook",
|
|
ComparisonStrategy: CompareWeekendWindow,
|
|
DefaultOutputName: "weekend.md",
|
|
Morning: true,
|
|
resolve: resolveWeekend,
|
|
},
|
|
{
|
|
ID: Storm,
|
|
Name: "Storm Report",
|
|
PromptID: "weather.storm_report",
|
|
ComparisonStrategy: CompareExplicitWindow,
|
|
DefaultOutputName: "storm.md",
|
|
resolve: resolveStorm,
|
|
},
|
|
}
|
|
registry := Registry{definitions: map[ID]Definition{}}
|
|
for _, definition := range definitions {
|
|
registry.definitions[definition.ID] = definition
|
|
}
|
|
return registry
|
|
}
|
|
|
|
func (r Registry) Lookup(id ID) (Definition, error) {
|
|
definition, ok := r.definitions[id]
|
|
if !ok {
|
|
return Definition{}, fmt.Errorf("unknown report %q", id)
|
|
}
|
|
return definition, nil
|
|
}
|
|
|
|
func (r Registry) MustLookup(id ID) Definition {
|
|
definition, err := r.Lookup(id)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return definition
|
|
}
|
|
|
|
func (r Registry) All() []Definition {
|
|
ids := []ID{DailyToday, DailyTomorrow, ThreeDay, Weekend, Storm}
|
|
out := make([]Definition, 0, len(ids))
|
|
for _, id := range ids {
|
|
if definition, ok := r.definitions[id]; ok {
|
|
out = append(out, definition)
|
|
}
|
|
}
|
|
return out
|
|
}
|