| package sarama |
| |
| //Resource holds information about acl resource type |
| type Resource struct { |
| ResourceType AclResourceType |
| ResourceName string |
| ResourcePatternType AclResourcePatternType |
| } |
| |
| func (r *Resource) encode(pe packetEncoder, version int16) error { |
| pe.putInt8(int8(r.ResourceType)) |
| |
| if err := pe.putString(r.ResourceName); err != nil { |
| return err |
| } |
| |
| if version == 1 { |
| if r.ResourcePatternType == AclPatternUnknown { |
| Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead") |
| r.ResourcePatternType = AclPatternLiteral |
| } |
| pe.putInt8(int8(r.ResourcePatternType)) |
| } |
| |
| return nil |
| } |
| |
| func (r *Resource) decode(pd packetDecoder, version int16) (err error) { |
| resourceType, err := pd.getInt8() |
| if err != nil { |
| return err |
| } |
| r.ResourceType = AclResourceType(resourceType) |
| |
| if r.ResourceName, err = pd.getString(); err != nil { |
| return err |
| } |
| if version == 1 { |
| pattern, err := pd.getInt8() |
| if err != nil { |
| return err |
| } |
| r.ResourcePatternType = AclResourcePatternType(pattern) |
| } |
| |
| return nil |
| } |
| |
| //Acl holds information about acl type |
| type Acl struct { |
| Principal string |
| Host string |
| Operation AclOperation |
| PermissionType AclPermissionType |
| } |
| |
| func (a *Acl) encode(pe packetEncoder) error { |
| if err := pe.putString(a.Principal); err != nil { |
| return err |
| } |
| |
| if err := pe.putString(a.Host); err != nil { |
| return err |
| } |
| |
| pe.putInt8(int8(a.Operation)) |
| pe.putInt8(int8(a.PermissionType)) |
| |
| return nil |
| } |
| |
| func (a *Acl) decode(pd packetDecoder, version int16) (err error) { |
| if a.Principal, err = pd.getString(); err != nil { |
| return err |
| } |
| |
| if a.Host, err = pd.getString(); err != nil { |
| return err |
| } |
| |
| operation, err := pd.getInt8() |
| if err != nil { |
| return err |
| } |
| a.Operation = AclOperation(operation) |
| |
| permissionType, err := pd.getInt8() |
| if err != nil { |
| return err |
| } |
| a.PermissionType = AclPermissionType(permissionType) |
| |
| return nil |
| } |
| |
| //ResourceAcls is an acl resource type |
| type ResourceAcls struct { |
| Resource |
| Acls []*Acl |
| } |
| |
| func (r *ResourceAcls) encode(pe packetEncoder, version int16) error { |
| if err := r.Resource.encode(pe, version); err != nil { |
| return err |
| } |
| |
| if err := pe.putArrayLength(len(r.Acls)); err != nil { |
| return err |
| } |
| for _, acl := range r.Acls { |
| if err := acl.encode(pe); err != nil { |
| return err |
| } |
| } |
| |
| return nil |
| } |
| |
| func (r *ResourceAcls) decode(pd packetDecoder, version int16) error { |
| if err := r.Resource.decode(pd, version); err != nil { |
| return err |
| } |
| |
| n, err := pd.getArrayLength() |
| if err != nil { |
| return err |
| } |
| |
| r.Acls = make([]*Acl, n) |
| for i := 0; i < n; i++ { |
| r.Acls[i] = new(Acl) |
| if err := r.Acls[i].decode(pd, version); err != nil { |
| return err |
| } |
| } |
| |
| return nil |
| } |