2
0

props.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package customcost
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type CustomCostProperty string
  7. const (
  8. CustomCostZoneProp CustomCostProperty = "zone"
  9. CustomCostAccountNameProp = "accountName"
  10. CustomCostChargeCategoryProp = "chargeCategory"
  11. CustomCostDescriptionProp = "description"
  12. CustomCostResourceNameProp = "resourceName"
  13. CustomCostResourceTypeProp = "resourceType"
  14. CustomCostProviderIdProp = "providerId"
  15. CustomCostUsageUnitProp = "usageUnit"
  16. CustomCostDomainProp = "domain"
  17. CustomCostCostSourceProp = "costSource"
  18. )
  19. func ParseCustomCostProperties(props []string) ([]CustomCostProperty, error) {
  20. var properties []CustomCostProperty
  21. added := make(map[CustomCostProperty]struct{})
  22. for _, prop := range props {
  23. property, err := ParseCustomCostProperty(prop)
  24. if err != nil {
  25. return nil, fmt.Errorf("failed to parse property: %w", err)
  26. }
  27. if _, ok := added[property]; !ok {
  28. added[property] = struct{}{}
  29. properties = append(properties, property)
  30. }
  31. }
  32. return properties, nil
  33. }
  34. func ParseCustomCostProperty(text string) (CustomCostProperty, error) {
  35. switch strings.TrimSpace(strings.ToLower(text)) {
  36. case strings.TrimSpace(strings.ToLower(string(CustomCostZoneProp))):
  37. return CustomCostZoneProp, nil
  38. case strings.TrimSpace(strings.ToLower(CustomCostAccountNameProp)):
  39. return CustomCostAccountNameProp, nil
  40. case strings.TrimSpace(strings.ToLower(CustomCostChargeCategoryProp)):
  41. return CustomCostChargeCategoryProp, nil
  42. case strings.TrimSpace(strings.ToLower(CustomCostDescriptionProp)):
  43. return CustomCostDescriptionProp, nil
  44. case strings.TrimSpace(strings.ToLower(CustomCostResourceNameProp)):
  45. return CustomCostResourceNameProp, nil
  46. case strings.TrimSpace(strings.ToLower(CustomCostResourceTypeProp)):
  47. return CustomCostResourceTypeProp, nil
  48. case strings.TrimSpace(strings.ToLower(CustomCostProviderIdProp)):
  49. return CustomCostProviderIdProp, nil
  50. case strings.TrimSpace(strings.ToLower(CustomCostUsageUnitProp)):
  51. return CustomCostUsageUnitProp, nil
  52. case strings.TrimSpace(strings.ToLower(CustomCostDomainProp)):
  53. return CustomCostDomainProp, nil
  54. case strings.TrimSpace(strings.ToLower(CustomCostCostSourceProp)):
  55. return CustomCostCostSourceProp, nil
  56. }
  57. return "", fmt.Errorf("invalid custom cost property: %s", text)
  58. }