parser.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package asset
  2. import "github.com/opencost/opencost/pkg/filter21/ast"
  3. // a slice of all the asset field instances the lexer should recognize as
  4. // valid left-hand comparators
  5. var assetFilterFields []*ast.Field = []*ast.Field{
  6. ast.NewField(FieldType),
  7. ast.NewField(FieldName),
  8. ast.NewField(FieldCategory),
  9. ast.NewField(FieldClusterID),
  10. ast.NewField(FieldProject),
  11. ast.NewField(FieldProvider),
  12. ast.NewField(FieldProviderID),
  13. ast.NewField(FieldAccount),
  14. ast.NewField(FieldService),
  15. ast.NewMapField(FieldLabel),
  16. ast.NewAliasField(DepartmentProp),
  17. ast.NewAliasField(EnvironmentProp),
  18. ast.NewAliasField(ProductProp),
  19. ast.NewAliasField(OwnerProp),
  20. ast.NewAliasField(TeamProp),
  21. }
  22. // fieldMap is a lazily loaded mapping from AllocationField to ast.Field
  23. var fieldMap map[AssetField]*ast.Field
  24. // DefaultFieldByName returns only default allocation filter fields by name.
  25. func DefaultFieldByName(field AssetField) *ast.Field {
  26. if fieldMap == nil {
  27. fieldMap = make(map[AssetField]*ast.Field, len(assetFilterFields))
  28. for _, f := range assetFilterFields {
  29. ff := *f
  30. fieldMap[AssetField(ff.Name)] = &ff
  31. }
  32. }
  33. if af, ok := fieldMap[field]; ok {
  34. afcopy := *af
  35. return &afcopy
  36. }
  37. return nil
  38. }
  39. // NewAssetFilterParser creates a new `ast.FilterParser` implementation
  40. // which uses asset specific fields
  41. func NewAssetFilterParser() ast.FilterParser {
  42. return ast.NewFilterParser(assetFilterFields)
  43. }