resource.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package kafka
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/ResourceType.java
  7. type ResourceType int8
  8. const (
  9. ResourceTypeUnknown ResourceType = 0
  10. ResourceTypeAny ResourceType = 1
  11. ResourceTypeTopic ResourceType = 2
  12. ResourceTypeGroup ResourceType = 3
  13. // See https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/config/ConfigResource.java#L36
  14. ResourceTypeBroker ResourceType = 4
  15. ResourceTypeCluster ResourceType = 4
  16. ResourceTypeTransactionalID ResourceType = 5
  17. ResourceTypeDelegationToken ResourceType = 6
  18. )
  19. func (rt ResourceType) String() string {
  20. mapping := map[ResourceType]string{
  21. ResourceTypeUnknown: "Unknown",
  22. ResourceTypeAny: "Any",
  23. ResourceTypeTopic: "Topic",
  24. ResourceTypeGroup: "Group",
  25. // Note that ResourceTypeBroker and ResourceTypeCluster have the same value.
  26. // A map cannot have duplicate values so we just use the same value for both.
  27. ResourceTypeCluster: "Cluster",
  28. ResourceTypeTransactionalID: "Transactionalid",
  29. ResourceTypeDelegationToken: "Delegationtoken",
  30. }
  31. s, ok := mapping[rt]
  32. if !ok {
  33. s = mapping[ResourceTypeUnknown]
  34. }
  35. return s
  36. }
  37. func (rt ResourceType) MarshalText() ([]byte, error) {
  38. return []byte(rt.String()), nil
  39. }
  40. func (rt *ResourceType) UnmarshalText(text []byte) error {
  41. normalized := strings.ToLower(string(text))
  42. mapping := map[string]ResourceType{
  43. "unknown": ResourceTypeUnknown,
  44. "any": ResourceTypeAny,
  45. "topic": ResourceTypeTopic,
  46. "group": ResourceTypeGroup,
  47. "broker": ResourceTypeBroker,
  48. "cluster": ResourceTypeCluster,
  49. "transactionalid": ResourceTypeTransactionalID,
  50. "delegationtoken": ResourceTypeDelegationToken,
  51. }
  52. parsed, ok := mapping[normalized]
  53. if !ok {
  54. *rt = ResourceTypeUnknown
  55. return fmt.Errorf("cannot parse %s as a ResourceType", normalized)
  56. }
  57. *rt = parsed
  58. return nil
  59. }
  60. // https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/PatternType.java
  61. type PatternType int8
  62. const (
  63. // PatternTypeUnknown represents any PatternType which this client cannot
  64. // understand.
  65. PatternTypeUnknown PatternType = 0
  66. // PatternTypeAny matches any resource pattern type.
  67. PatternTypeAny PatternType = 1
  68. // PatternTypeMatch perform pattern matching.
  69. PatternTypeMatch PatternType = 2
  70. // PatternTypeLiteral represents a literal name.
  71. // A literal name defines the full name of a resource, e.g. topic with name
  72. // 'foo', or group with name 'bob'.
  73. PatternTypeLiteral PatternType = 3
  74. // PatternTypePrefixed represents a prefixed name.
  75. // A prefixed name defines a prefix for a resource, e.g. topics with names
  76. // that start with 'foo'.
  77. PatternTypePrefixed PatternType = 4
  78. )
  79. func (pt PatternType) String() string {
  80. mapping := map[PatternType]string{
  81. PatternTypeUnknown: "Unknown",
  82. PatternTypeAny: "Any",
  83. PatternTypeMatch: "Match",
  84. PatternTypeLiteral: "Literal",
  85. PatternTypePrefixed: "Prefixed",
  86. }
  87. s, ok := mapping[pt]
  88. if !ok {
  89. s = mapping[PatternTypeUnknown]
  90. }
  91. return s
  92. }
  93. func (pt PatternType) MarshalText() ([]byte, error) {
  94. return []byte(pt.String()), nil
  95. }
  96. func (pt *PatternType) UnmarshalText(text []byte) error {
  97. normalized := strings.ToLower(string(text))
  98. mapping := map[string]PatternType{
  99. "unknown": PatternTypeUnknown,
  100. "any": PatternTypeAny,
  101. "match": PatternTypeMatch,
  102. "literal": PatternTypeLiteral,
  103. "prefixed": PatternTypePrefixed,
  104. }
  105. parsed, ok := mapping[normalized]
  106. if !ok {
  107. *pt = PatternTypeUnknown
  108. return fmt.Errorf("cannot parse %s as a PatternType", normalized)
  109. }
  110. *pt = parsed
  111. return nil
  112. }