blob: c3ba8ddcf6448c850755a67d871dc54f51d631be [file] [log] [blame]
Scott Bakered4efab2020-01-13 19:12:25 -08001package sarama
2
David K. Bainbridgebd6b2882021-08-26 13:31:02 +00003import (
4 "fmt"
5 "strings"
6)
7
Scott Bakered4efab2020-01-13 19:12:25 -08008type (
9 AclOperation int
10
11 AclPermissionType int
12
13 AclResourceType int
14
15 AclResourcePatternType int
16)
17
18// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclOperation.java
19const (
20 AclOperationUnknown AclOperation = iota
21 AclOperationAny
22 AclOperationAll
23 AclOperationRead
24 AclOperationWrite
25 AclOperationCreate
26 AclOperationDelete
27 AclOperationAlter
28 AclOperationDescribe
29 AclOperationClusterAction
30 AclOperationDescribeConfigs
31 AclOperationAlterConfigs
32 AclOperationIdempotentWrite
33)
34
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000035func (a *AclOperation) String() string {
36 mapping := map[AclOperation]string{
37 AclOperationUnknown: "Unknown",
38 AclOperationAny: "Any",
39 AclOperationAll: "All",
40 AclOperationRead: "Read",
41 AclOperationWrite: "Write",
42 AclOperationCreate: "Create",
43 AclOperationDelete: "Delete",
44 AclOperationAlter: "Alter",
45 AclOperationDescribe: "Describe",
46 AclOperationClusterAction: "ClusterAction",
47 AclOperationDescribeConfigs: "DescribeConfigs",
48 AclOperationAlterConfigs: "AlterConfigs",
49 AclOperationIdempotentWrite: "IdempotentWrite",
50 }
51 s, ok := mapping[*a]
52 if !ok {
53 s = mapping[AclOperationUnknown]
54 }
55 return s
56}
57
58// MarshalText returns the text form of the AclOperation (name without prefix)
59func (a *AclOperation) MarshalText() ([]byte, error) {
60 return []byte(a.String()), nil
61}
62
63// UnmarshalText takes a text reprentation of the operation and converts it to an AclOperation
64func (a *AclOperation) UnmarshalText(text []byte) error {
65 normalized := strings.ToLower(string(text))
66 mapping := map[string]AclOperation{
67 "unknown": AclOperationUnknown,
68 "any": AclOperationAny,
69 "all": AclOperationAll,
70 "read": AclOperationRead,
71 "write": AclOperationWrite,
72 "create": AclOperationCreate,
73 "delete": AclOperationDelete,
74 "alter": AclOperationAlter,
75 "describe": AclOperationDescribe,
76 "clusteraction": AclOperationClusterAction,
77 "describeconfigs": AclOperationDescribeConfigs,
78 "alterconfigs": AclOperationAlterConfigs,
79 "idempotentwrite": AclOperationIdempotentWrite,
80 }
81 ao, ok := mapping[normalized]
82 if !ok {
83 *a = AclOperationUnknown
84 return fmt.Errorf("no acl operation with name %s", normalized)
85 }
86 *a = ao
87 return nil
88}
89
Scott Bakered4efab2020-01-13 19:12:25 -080090// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclPermissionType.java
91const (
92 AclPermissionUnknown AclPermissionType = iota
93 AclPermissionAny
94 AclPermissionDeny
95 AclPermissionAllow
96)
97
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000098func (a *AclPermissionType) String() string {
99 mapping := map[AclPermissionType]string{
100 AclPermissionUnknown: "Unknown",
101 AclPermissionAny: "Any",
102 AclPermissionDeny: "Deny",
103 AclPermissionAllow: "Allow",
104 }
105 s, ok := mapping[*a]
106 if !ok {
107 s = mapping[AclPermissionUnknown]
108 }
109 return s
110}
111
112// MarshalText returns the text form of the AclPermissionType (name without prefix)
113func (a *AclPermissionType) MarshalText() ([]byte, error) {
114 return []byte(a.String()), nil
115}
116
117// UnmarshalText takes a text reprentation of the permission type and converts it to an AclPermissionType
118func (a *AclPermissionType) UnmarshalText(text []byte) error {
119 normalized := strings.ToLower(string(text))
120 mapping := map[string]AclPermissionType{
121 "unknown": AclPermissionUnknown,
122 "any": AclPermissionAny,
123 "deny": AclPermissionDeny,
124 "allow": AclPermissionAllow,
125 }
126
127 apt, ok := mapping[normalized]
128 if !ok {
129 *a = AclPermissionUnknown
130 return fmt.Errorf("no acl permission with name %s", normalized)
131 }
132 *a = apt
133 return nil
134}
135
Scott Bakered4efab2020-01-13 19:12:25 -0800136// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/ResourceType.java
137const (
138 AclResourceUnknown AclResourceType = iota
139 AclResourceAny
140 AclResourceTopic
141 AclResourceGroup
142 AclResourceCluster
143 AclResourceTransactionalID
David K. Bainbridgebd6b2882021-08-26 13:31:02 +0000144 AclResourceDelegationToken
Scott Bakered4efab2020-01-13 19:12:25 -0800145)
146
David K. Bainbridgebd6b2882021-08-26 13:31:02 +0000147func (a *AclResourceType) String() string {
148 mapping := map[AclResourceType]string{
149 AclResourceUnknown: "Unknown",
150 AclResourceAny: "Any",
151 AclResourceTopic: "Topic",
152 AclResourceGroup: "Group",
153 AclResourceCluster: "Cluster",
154 AclResourceTransactionalID: "TransactionalID",
155 AclResourceDelegationToken: "DelegationToken",
156 }
157 s, ok := mapping[*a]
158 if !ok {
159 s = mapping[AclResourceUnknown]
160 }
161 return s
162}
163
164// MarshalText returns the text form of the AclResourceType (name without prefix)
165func (a *AclResourceType) MarshalText() ([]byte, error) {
166 return []byte(a.String()), nil
167}
168
169// UnmarshalText takes a text reprentation of the resource type and converts it to an AclResourceType
170func (a *AclResourceType) UnmarshalText(text []byte) error {
171 normalized := strings.ToLower(string(text))
172 mapping := map[string]AclResourceType{
173 "unknown": AclResourceUnknown,
174 "any": AclResourceAny,
175 "topic": AclResourceTopic,
176 "group": AclResourceGroup,
177 "cluster": AclResourceCluster,
178 "transactionalid": AclResourceTransactionalID,
179 "delegationtoken": AclResourceDelegationToken,
180 }
181
182 art, ok := mapping[normalized]
183 if !ok {
184 *a = AclResourceUnknown
185 return fmt.Errorf("no acl resource with name %s", normalized)
186 }
187 *a = art
188 return nil
189}
190
Scott Bakered4efab2020-01-13 19:12:25 -0800191// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/PatternType.java
192const (
193 AclPatternUnknown AclResourcePatternType = iota
194 AclPatternAny
195 AclPatternMatch
196 AclPatternLiteral
197 AclPatternPrefixed
198)
David K. Bainbridgebd6b2882021-08-26 13:31:02 +0000199
200func (a *AclResourcePatternType) String() string {
201 mapping := map[AclResourcePatternType]string{
202 AclPatternUnknown: "Unknown",
203 AclPatternAny: "Any",
204 AclPatternMatch: "Match",
205 AclPatternLiteral: "Literal",
206 AclPatternPrefixed: "Prefixed",
207 }
208 s, ok := mapping[*a]
209 if !ok {
210 s = mapping[AclPatternUnknown]
211 }
212 return s
213}
214
215// MarshalText returns the text form of the AclResourcePatternType (name without prefix)
216func (a *AclResourcePatternType) MarshalText() ([]byte, error) {
217 return []byte(a.String()), nil
218}
219
220// UnmarshalText takes a text reprentation of the resource pattern type and converts it to an AclResourcePatternType
221func (a *AclResourcePatternType) UnmarshalText(text []byte) error {
222 normalized := strings.ToLower(string(text))
223 mapping := map[string]AclResourcePatternType{
224 "unknown": AclPatternUnknown,
225 "any": AclPatternAny,
226 "match": AclPatternMatch,
227 "literal": AclPatternLiteral,
228 "prefixed": AclPatternPrefixed,
229 }
230
231 arpt, ok := mapping[normalized]
232 if !ok {
233 *a = AclPatternUnknown
234 return fmt.Errorf("no acl resource pattern with name %s", normalized)
235 }
236 *a = arpt
237 return nil
238}