in code/go/internal/validator/semantic/validate_kibana_filter_present.go [94:131]
func findDashboardFilter(file pkgpath.File) error {
searchJSON, err := file.Values("$.attributes.kibanaSavedObjectMeta.searchSourceJSON")
if err != nil {
return fmt.Errorf("unable to find search definition: %w", err)
}
var search struct {
Filter []any `mapstructure:"filter"`
Query struct {
Query string `mapstructure:"query"`
} `mapstructure:"query"`
}
switch searchJSON := searchJSON.(type) {
case map[string]any:
// Dashboard is decoded, as in source packages.
err = mapstructure.Decode(searchJSON, &search)
if err != nil {
return fmt.Errorf("unable to decode search definition: %w", err)
}
case string:
// Dashboard is encoded, as in built packages.
err = json.Unmarshal([]byte(searchJSON), &search)
if err != nil {
return fmt.Errorf("unable to decode embedded search definition: %w", err)
}
default:
return fmt.Errorf("unexpected type for search source JSON: %T", searchJSON)
}
if len(search.Filter) == 0 {
if len(search.Query.Query) > 0 {
return errDashboardWithQueryAndNoFilter
}
return errDashboardFilterNotFound
}
return nil
}