64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package generatedtext
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type dayStyleFields struct {
|
|
Summary string
|
|
ForecastDiscussion []string
|
|
PrecipitationTiming string
|
|
Confidence string
|
|
}
|
|
|
|
type dayStyleGeneratedText interface {
|
|
dayStyleFields() dayStyleFields
|
|
setDayStyleFields(dayStyleFields)
|
|
}
|
|
|
|
func validateDayStyleGeneratedText[T any, PT interface {
|
|
*T
|
|
dayStyleGeneratedText
|
|
}](data []byte, name string) (T, []byte, error) {
|
|
value, err := decodeGeneratedText[T](data, name)
|
|
if err != nil {
|
|
var zero T
|
|
return zero, nil, err
|
|
}
|
|
|
|
pointer := PT(&value)
|
|
fields := pointer.dayStyleFields()
|
|
fields.Summary = strings.TrimSpace(fields.Summary)
|
|
fields.PrecipitationTiming = strings.TrimSpace(fields.PrecipitationTiming)
|
|
fields.Confidence = strings.TrimSpace(fields.Confidence)
|
|
fields.ForecastDiscussion = trimNonEmpty(fields.ForecastDiscussion)
|
|
if fields.Summary == "" {
|
|
var zero T
|
|
return zero, nil, fmt.Errorf("%s generated text summary is required", name)
|
|
}
|
|
if len(fields.ForecastDiscussion) == 0 {
|
|
var zero T
|
|
return zero, nil, fmt.Errorf("%s generated text forecast discussion is required", name)
|
|
}
|
|
pointer.setDayStyleFields(fields)
|
|
|
|
normalized, err := normalizeGeneratedText(value, name)
|
|
if err != nil {
|
|
var zero T
|
|
return zero, nil, err
|
|
}
|
|
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
|
|
}
|