blob: f528512d024aa277b125700c21f61e2b95510c59 [file] [log] [blame]
package sarama
// AlterClientQuotas Request (Version: 0) => [entries] validate_only
// entries => [entity] [ops]
// entity => entity_type entity_name
// entity_type => STRING
// entity_name => NULLABLE_STRING
// ops => key value remove
// key => STRING
// value => FLOAT64
// remove => BOOLEAN
// validate_only => BOOLEAN
type AlterClientQuotasRequest struct {
Entries []AlterClientQuotasEntry // The quota configuration entries to alter.
ValidateOnly bool // Whether the alteration should be validated, but not performed.
}
type AlterClientQuotasEntry struct {
Entity []QuotaEntityComponent // The quota entity to alter.
Ops []ClientQuotasOp // An individual quota configuration entry to alter.
}
type ClientQuotasOp struct {
Key string // The quota configuration key.
Value float64 // The value to set, otherwise ignored if the value is to be removed.
Remove bool // Whether the quota configuration value should be removed, otherwise set.
}
func (a *AlterClientQuotasRequest) encode(pe packetEncoder) error {
// Entries
if err := pe.putArrayLength(len(a.Entries)); err != nil {
return err
}
for _, e := range a.Entries {
if err := e.encode(pe); err != nil {
return err
}
}
// ValidateOnly
pe.putBool(a.ValidateOnly)
return nil
}
func (a *AlterClientQuotasRequest) decode(pd packetDecoder, version int16) error {
// Entries
entryCount, err := pd.getArrayLength()
if err != nil {
return err
}
if entryCount > 0 {
a.Entries = make([]AlterClientQuotasEntry, entryCount)
for i := range a.Entries {
e := AlterClientQuotasEntry{}
if err = e.decode(pd, version); err != nil {
return err
}
a.Entries[i] = e
}
} else {
a.Entries = []AlterClientQuotasEntry{}
}
// ValidateOnly
validateOnly, err := pd.getBool()
if err != nil {
return err
}
a.ValidateOnly = validateOnly
return nil
}
func (a *AlterClientQuotasEntry) encode(pe packetEncoder) error {
// Entity
if err := pe.putArrayLength(len(a.Entity)); err != nil {
return err
}
for _, component := range a.Entity {
if err := component.encode(pe); err != nil {
return err
}
}
// Ops
if err := pe.putArrayLength(len(a.Ops)); err != nil {
return err
}
for _, o := range a.Ops {
if err := o.encode(pe); err != nil {
return err
}
}
return nil
}
func (a *AlterClientQuotasEntry) decode(pd packetDecoder, version int16) error {
// Entity
componentCount, err := pd.getArrayLength()
if err != nil {
return err
}
if componentCount > 0 {
a.Entity = make([]QuotaEntityComponent, componentCount)
for i := 0; i < componentCount; i++ {
component := QuotaEntityComponent{}
if err := component.decode(pd, version); err != nil {
return err
}
a.Entity[i] = component
}
} else {
a.Entity = []QuotaEntityComponent{}
}
// Ops
opCount, err := pd.getArrayLength()
if err != nil {
return err
}
if opCount > 0 {
a.Ops = make([]ClientQuotasOp, opCount)
for i := range a.Ops {
c := ClientQuotasOp{}
if err = c.decode(pd, version); err != nil {
return err
}
a.Ops[i] = c
}
} else {
a.Ops = []ClientQuotasOp{}
}
return nil
}
func (c *ClientQuotasOp) encode(pe packetEncoder) error {
// Key
if err := pe.putString(c.Key); err != nil {
return err
}
// Value
pe.putFloat64(c.Value)
// Remove
pe.putBool(c.Remove)
return nil
}
func (c *ClientQuotasOp) decode(pd packetDecoder, version int16) error {
// Key
key, err := pd.getString()
if err != nil {
return err
}
c.Key = key
// Value
value, err := pd.getFloat64()
if err != nil {
return err
}
c.Value = value
// Remove
remove, err := pd.getBool()
if err != nil {
return err
}
c.Remove = remove
return nil
}
func (a *AlterClientQuotasRequest) key() int16 {
return 49
}
func (a *AlterClientQuotasRequest) version() int16 {
return 0
}
func (a *AlterClientQuotasRequest) headerVersion() int16 {
return 1
}
func (a *AlterClientQuotasRequest) requiredVersion() KafkaVersion {
return V2_6_0_0
}