func newCategoriesFilterFromQuery()

in categories.go [101:159]


func newCategoriesFilterFromQuery(query url.Values) (*packages.Filter, error) {
	var filter packages.Filter

	if len(query) == 0 {
		return &filter, nil
	}

	var err error
	if v := query.Get("kibana.version"); v != "" {
		filter.KibanaVersion, err = semver.NewVersion(v)
		if err != nil {
			return nil, fmt.Errorf("invalid Kibana version '%s': %w", v, err)
		}
	}

	// Deprecated: release tags to be removed.
	if v := query.Get("experimental"); v != "" {
		filter.Experimental, err = strconv.ParseBool(v)
		if err != nil {
			return nil, fmt.Errorf("invalid 'experimental' query param: '%s'", v)
		}
	}

	if v := query.Get("prerelease"); v != "" {
		// In case of error, keep it false
		filter.Prerelease, err = strconv.ParseBool(v)
		if err != nil {
			return nil, fmt.Errorf("invalid 'prerelease' query param: '%s'", v)
		}
	}

	if v := query.Get("capabilities"); v != "" {
		filter.Capabilities = strings.Split(v, ",")
	}

	if v := query.Get("spec.min"); v != "" {
		filter.SpecMin, err = getSpecVersion(v)
		if err != nil {
			return nil, fmt.Errorf("invalid 'spec.min' version: %w", err)
		}
	}

	if v := query.Get("spec.max"); v != "" {
		filter.SpecMax, err = getSpecVersion(v)
		if err != nil {
			return nil, fmt.Errorf("invalid 'spec.max' version: %w", err)
		}
	}

	if v := query.Get("discovery"); v != "" {
		discovery, err := packages.NewDiscoveryFilter(v)
		if err != nil {
			return nil, fmt.Errorf("invalid 'discovery' query param: '%s': %w", v, err)
		}
		filter.Discovery = discovery
	}

	return &filter, nil
}