Files
weatherreporter/internal/generatedtext/tomorrow.go

49 lines
1.3 KiB
Go
Raw Normal View History

2026-06-14 23:25:55 +00:00
package generatedtext
import (
"fmt"
"strings"
)
type Tomorrow struct {
Summary string `json:"summary"`
ForecastDiscussion []string `json:"forecast_discussion"`
PrecipitationTiming string `json:"precipitation_timing,omitempty"`
Confidence string `json:"confidence,omitempty"`
}
func ValidateTomorrow(data []byte) (Tomorrow, []byte, error) {
2026-06-15 12:41:45 +00:00
value, err := decodeGeneratedText[Tomorrow](data, "tomorrow")
if err != nil {
return Tomorrow{}, nil, err
2026-06-14 23:25:55 +00:00
}
value.Summary = strings.TrimSpace(value.Summary)
value.PrecipitationTiming = strings.TrimSpace(value.PrecipitationTiming)
value.Confidence = strings.TrimSpace(value.Confidence)
value.ForecastDiscussion = trimNonEmpty(value.ForecastDiscussion)
if value.Summary == "" {
return Tomorrow{}, nil, fmt.Errorf("tomorrow generated text summary is required")
}
if len(value.ForecastDiscussion) == 0 {
return Tomorrow{}, nil, fmt.Errorf("tomorrow generated text forecast discussion is required")
}
2026-06-15 12:41:45 +00:00
normalized, err := normalizeGeneratedText(value, "tomorrow")
2026-06-14 23:25:55 +00:00
if err != nil {
2026-06-15 12:41:45 +00:00
return Tomorrow{}, nil, err
2026-06-14 23:25:55 +00:00
}
return value, normalized, nil
}
func trimNonEmpty(values []string) []string {
out := make([]string, 0, len(values))
for _, value := range values {
trimmed := strings.TrimSpace(value)
if trimmed != "" {
out = append(out, trimmed)
}
}
return out
}