unit.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package unit
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type Unit string
  7. const (
  8. // Durations of time
  9. Millisecond Unit = "ms"
  10. Second Unit = "s"
  11. Minute Unit = "min"
  12. Hour Unit = "hr"
  13. // Data storage and transfer
  14. Byte Unit = "B"
  15. KB Unit = "KB"
  16. KiB Unit = "KiB"
  17. MB Unit = "MB"
  18. MiB Unit = "MiB"
  19. GB Unit = "GB"
  20. GiB Unit = "GiB"
  21. TB Unit = "TB"
  22. TiB Unit = "TiB"
  23. PB Unit = "PB"
  24. PiB Unit = "PiB"
  25. // Compute resources
  26. MCPU Unit = "mCPU"
  27. VCPU Unit = "vCPU"
  28. GPU Unit = "GPU"
  29. // Compute resources cumulative over time
  30. VCPUHour Unit = "vCPU-hr"
  31. RAMGiBHour Unit = "RAM-GiB-hr"
  32. GPUHour Unit = "GPU-hr"
  33. // Storage resources cumulative over time
  34. StorageGiBHour Unit = "storage-GiB-hr"
  35. )
  36. // validUnits is a map of all valid unit strings for quick lookup
  37. var validUnits = map[string]Unit{
  38. string(Millisecond): Millisecond,
  39. string(Second): Second,
  40. string(Minute): Minute,
  41. string(Hour): Hour,
  42. string(Byte): Byte,
  43. string(KB): KB,
  44. string(KiB): KiB,
  45. string(MB): MB,
  46. string(MiB): MiB,
  47. string(GB): GB,
  48. string(GiB): GiB,
  49. string(TB): TB,
  50. string(TiB): TiB,
  51. string(PB): PB,
  52. string(PiB): PiB,
  53. string(MCPU): MCPU,
  54. string(VCPU): VCPU,
  55. string(GPU): GPU,
  56. string(VCPUHour): VCPUHour,
  57. string(RAMGiBHour): RAMGiBHour,
  58. string(GPUHour): GPUHour,
  59. string(StorageGiBHour): StorageGiBHour,
  60. }
  61. // ParseUnit parses a string into a Unit type.
  62. // It performs case-insensitive matching and returns an error if the string
  63. // does not match any valid unit.
  64. func ParseUnit(s string) (Unit, error) {
  65. for key, unit := range validUnits {
  66. if strings.EqualFold(key, s) {
  67. return unit, nil
  68. }
  69. }
  70. return "", fmt.Errorf("invalid unit: %q", s)
  71. }