MCPcopy Index your code
hub / github.com/coder/coder / ParseCustomList

Function ParseCustomList

coderd/httpapi/queryparams.go:370–403  ·  view source on GitHub ↗

ParseCustomList is a function that handles csv query params or multiple values for a query param. Csv is supported as it is a common way to pass multiple values in a query param. Multiple values is supported (key=value&key=value2) for feature parity with GitHub issue search.

(parser *QueryParamParser, vals url.Values, def []T, queryParam string, parseFunc func(v string) (T, error))

Source from the content-addressed store, hash-verified

368// Csv is supported as it is a common way to pass multiple values in a query param.
369// Multiple values is supported (key=value&key=value2) for feature parity with GitHub issue search.
370func ParseCustomList[T any](parser *QueryParamParser, vals url.Values, def []T, queryParam string, parseFunc func(v string) (T, error)) []T {
371 v, err := parseQueryParamSet(parser, vals, func(set []string) ([]T, error) {
372 // Gather all terms.
373 allTerms := make([]string, 0, len(set))
374 for _, s := range set {
375 // If a term is a csv, break it out into individual terms.
376 terms := strings.Split(s, ",")
377 allTerms = append(allTerms, terms...)
378 }
379
380 var badErrors error
381 var output []T
382 for _, s := range allTerms {
383 good, err := parseFunc(s)
384 if err != nil {
385 badErrors = errors.Join(badErrors, err)
386 continue
387 }
388 output = append(output, good)
389 }
390 if badErrors != nil {
391 return []T{}, badErrors
392 }
393
394 return output, nil
395 }, def, queryParam)
396 if err != nil {
397 parser.Errors = append(parser.Errors, codersdk.ValidationError{
398 Field: queryParam,
399 Detail: fmt.Sprintf("Query param %q has invalid values: %s", queryParam, err.Error()),
400 })
401 }
402 return v
403}
404
405func parseNullableQueryParam[T any](parser *QueryParamParser, vals url.Values, parse func(v string) (T, error), def sql.Null[T], queryParam string) (sql.Null[T], error) {
406 setParse := parseSingle(parser, parse, def.V, queryParam)

Callers 7

TestParseQueryParamsFunction · 0.92
UsersFunction · 0.92
WorkspacesFunction · 0.92
ChatsFunction · 0.92
UUIDsMethod · 0.85
StringsMethod · 0.85

Calls 2

parseQueryParamSetFunction · 0.85
ErrorMethod · 0.45

Tested by 1

TestParseQueryParamsFunction · 0.74