glanceapp/glance · error
invalid query parameter value type: %T
Error message
invalid query parameter value type: %T
What it means
Returned by queryParametersField.UnmarshalYAML when, inside a list-typed query parameter value, one list element is not a string, number, or bool. The code type-switches each item of a []any; anything else (nested maps/lists, nulls) falls to the inner default branch. The %T verb prints the element's Go type, e.g. 'map[string]interface {}'.
Source
Thrown at internal/glance/config-fields.go:269
case string:
(*q)[key] = []string{v}
case int, int8, int16, int32, int64, float32, float64:
(*q)[key] = []string{fmt.Sprintf("%v", v)}
case bool:
(*q)[key] = []string{fmt.Sprintf("%t", v)}
case []string:
(*q)[key] = append((*q)[key], v...)
case []any:
for _, item := range v {
switch item := item.(type) {
case string:
(*q)[key] = append((*q)[key], item)
case int, int8, int16, int32, int64, float32, float64:
(*q)[key] = append((*q)[key], fmt.Sprintf("%v", item))
case bool:
(*q)[key] = append((*q)[key], fmt.Sprintf("%t", item))
default:
return fmt.Errorf("invalid query parameter value type: %T", item)
}
}
default:
return fmt.Errorf("invalid query parameter value type: %T", value)
}
}
return nil
}
func (q *queryParametersField) toQueryString() string {
query := url.Values{}
for key, values := range *q {
for _, value := range values {
query.Add(key, value)
}
}View on GitHub (pinned to 91324e8de7)
Solutions
- Flatten query parameter lists to scalars only: strings, numbers, booleans.
- Remove null/`~` entries and nested lists/maps from parameter values.
- For repeated params use a flat list: `key: [a, b, c]` — each element must be a scalar.
Example fix
# before
query-parameters:
tag:
- featured
- [urgent, new]
# after
query-parameters:
tag:
- featured
- urgent
- new Defensive patterns
Strategy: type-guard
Validate before calling
python3 - <<'EOF'
import sys,yaml
def scalars(v):
if isinstance(v,list):
return all(scalars(i) for i in v)
return isinstance(v,(str,int,float,bool)) and v is not None
def walk(o):
if isinstance(o,dict):
for k,v in o.items():
if k=='query-parameters' and not all(scalars(x) for x in v.values()):
sys.exit(f'non-scalar query param: {v}')
walk(v)
elif isinstance(o,list):
for i in o: walk(i)
walk(yaml.safe_load(open('glance.yml')))
print('ok')
EOF Type guard
// Go: guard before assigning into queryParametersField
func isScalarOrScalarList(v any) bool {
switch t := v.(type) {
case string, int, int8, int16, int32, int64, float32, float64, bool:
return true
case []string, []any:
list, ok := any(t).([]any)
if !ok {
return true // []string
}
for _, item := range list {
switch item.(type) {
case string, int, int8, int16, int32, int64, float32, float64, bool:
default:
return false
}
}
return true
}
return false
} Prevention
- Keep query parameter list elements flat scalars.
- Avoid null (`~`) entries in parameter lists.
When it happens
Trigger: A query-parameters config like `key: [a, [b, c]]` or `key: [{v: 1}]` or a list containing a YAML null (`~`) — the nested list/map/nil element hits the default case.
Common situations: Trying to nest structures inside query param lists; YAML `~`/null entries from templating mistakes; over-structuring params when only flat scalars are supported.
Related errors
- URL is required
- nested groups are not supported
- split columns inside of groups are not supported
- source is required
- subreddit is required
AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15).
Data as JSON: /api/errors/869492b0f1f505e5.
Report an issue: GitHub.