package model import ( "fmt" "time" "github.com/opencost/opencost/core/pkg/model/pb" "github.com/opencost/opencost/core/pkg/opencost" "github.com/opencost/opencost/core/pkg/util/timeutil" ) // ConvertWindow validates and converts a protobuf window to a closed opencost.Window or returns an error func ConvertWindow(window *pb.Window) (opencost.Window, error) { if window == nil { return opencost.Window{}, fmt.Errorf("cannot convert nil window") } var res time.Duration switch window.Resolution { case "1d": res = timeutil.Day case "1h": res = time.Hour case "10m": res = time.Minute * 10 default: return opencost.Window{}, fmt.Errorf("invalid window resolution %s", window.Resolution) } start := window.Start.AsTime().UTC() if !start.Equal(start.Truncate(res)) { return opencost.Window{}, fmt.Errorf("invalid start time for resolution '%s': %s", window.Resolution, start.Format(time.RFC3339)) } win := opencost.NewClosedWindow(start, start.Add(res)) return win, nil }