| 314 | } |
| 315 | |
| 316 | func (p *QueryParamParser) Duration(vals url.Values, def time.Duration, queryParam string) time.Duration { |
| 317 | v, err := parseQueryParam(p, vals, func(v string) (time.Duration, error) { |
| 318 | d, err := time.ParseDuration(v) |
| 319 | if err != nil { |
| 320 | return 0, err |
| 321 | } |
| 322 | return d, nil |
| 323 | }, def, queryParam) |
| 324 | if err != nil { |
| 325 | p.Errors = append(p.Errors, codersdk.ValidationError{ |
| 326 | Field: queryParam, |
| 327 | Detail: fmt.Sprintf("Query param %q must be a valid duration (e.g., '24h', '30m', '1h30m'): %s", queryParam, err.Error()), |
| 328 | }) |
| 329 | } |
| 330 | return v |
| 331 | } |
| 332 | |
| 333 | // ValidEnum represents an enum that can be parsed and validated. |
| 334 | type ValidEnum interface { |