mirror of
https://github.com/ManyakRus/starter.git
synced 2025-12-05 00:12:51 +02:00
124 lines
3.7 KiB
Go
124 lines
3.7 KiB
Go
package kafka
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/ResourceType.java
|
|
type ResourceType int8
|
|
|
|
const (
|
|
ResourceTypeUnknown ResourceType = 0
|
|
ResourceTypeAny ResourceType = 1
|
|
ResourceTypeTopic ResourceType = 2
|
|
ResourceTypeGroup ResourceType = 3
|
|
// See https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/config/ConfigResource.java#L36
|
|
ResourceTypeBroker ResourceType = 4
|
|
ResourceTypeCluster ResourceType = 4
|
|
ResourceTypeTransactionalID ResourceType = 5
|
|
ResourceTypeDelegationToken ResourceType = 6
|
|
)
|
|
|
|
func (rt ResourceType) String() string {
|
|
mapping := map[ResourceType]string{
|
|
ResourceTypeUnknown: "Unknown",
|
|
ResourceTypeAny: "Any",
|
|
ResourceTypeTopic: "Topic",
|
|
ResourceTypeGroup: "Group",
|
|
// Note that ResourceTypeBroker and ResourceTypeCluster have the same value.
|
|
// A map cannot have duplicate values so we just use the same value for both.
|
|
ResourceTypeCluster: "Cluster",
|
|
ResourceTypeTransactionalID: "Transactionalid",
|
|
ResourceTypeDelegationToken: "Delegationtoken",
|
|
}
|
|
s, ok := mapping[rt]
|
|
if !ok {
|
|
s = mapping[ResourceTypeUnknown]
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (rt ResourceType) MarshalText() ([]byte, error) {
|
|
return []byte(rt.String()), nil
|
|
}
|
|
|
|
func (rt *ResourceType) UnmarshalText(text []byte) error {
|
|
normalized := strings.ToLower(string(text))
|
|
mapping := map[string]ResourceType{
|
|
"unknown": ResourceTypeUnknown,
|
|
"any": ResourceTypeAny,
|
|
"topic": ResourceTypeTopic,
|
|
"group": ResourceTypeGroup,
|
|
"broker": ResourceTypeBroker,
|
|
"cluster": ResourceTypeCluster,
|
|
"transactionalid": ResourceTypeTransactionalID,
|
|
"delegationtoken": ResourceTypeDelegationToken,
|
|
}
|
|
parsed, ok := mapping[normalized]
|
|
if !ok {
|
|
*rt = ResourceTypeUnknown
|
|
return fmt.Errorf("cannot parse %s as a ResourceType", normalized)
|
|
}
|
|
*rt = parsed
|
|
return nil
|
|
}
|
|
|
|
// https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/PatternType.java
|
|
type PatternType int8
|
|
|
|
const (
|
|
// PatternTypeUnknown represents any PatternType which this client cannot
|
|
// understand.
|
|
PatternTypeUnknown PatternType = 0
|
|
// PatternTypeAny matches any resource pattern type.
|
|
PatternTypeAny PatternType = 1
|
|
// PatternTypeMatch perform pattern matching.
|
|
PatternTypeMatch PatternType = 2
|
|
// PatternTypeLiteral represents a literal name.
|
|
// A literal name defines the full name of a resource, e.g. topic with name
|
|
// 'foo', or group with name 'bob'.
|
|
PatternTypeLiteral PatternType = 3
|
|
// PatternTypePrefixed represents a prefixed name.
|
|
// A prefixed name defines a prefix for a resource, e.g. topics with names
|
|
// that start with 'foo'.
|
|
PatternTypePrefixed PatternType = 4
|
|
)
|
|
|
|
func (pt PatternType) String() string {
|
|
mapping := map[PatternType]string{
|
|
PatternTypeUnknown: "Unknown",
|
|
PatternTypeAny: "Any",
|
|
PatternTypeMatch: "Match",
|
|
PatternTypeLiteral: "Literal",
|
|
PatternTypePrefixed: "Prefixed",
|
|
}
|
|
s, ok := mapping[pt]
|
|
if !ok {
|
|
s = mapping[PatternTypeUnknown]
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (pt PatternType) MarshalText() ([]byte, error) {
|
|
return []byte(pt.String()), nil
|
|
}
|
|
|
|
func (pt *PatternType) UnmarshalText(text []byte) error {
|
|
normalized := strings.ToLower(string(text))
|
|
mapping := map[string]PatternType{
|
|
"unknown": PatternTypeUnknown,
|
|
"any": PatternTypeAny,
|
|
"match": PatternTypeMatch,
|
|
"literal": PatternTypeLiteral,
|
|
"prefixed": PatternTypePrefixed,
|
|
}
|
|
parsed, ok := mapping[normalized]
|
|
if !ok {
|
|
*pt = PatternTypeUnknown
|
|
return fmt.Errorf("cannot parse %s as a PatternType", normalized)
|
|
}
|
|
*pt = parsed
|
|
return nil
|
|
}
|