class Kafka::Protocol::Encoder

to it.
An encoder wraps an IO object, making it easy to write specific data types

def self.encode_with(object)

Returns:
  • (String) - the encoded data.

Parameters:
  • object (#encode) -- the object that will encode itself.
def self.encode_with(object)
  buffer = StringIO.new
  encoder = new(buffer)
  object.encode(encoder)
  buffer.string
end

def initialize(io)

Parameters:
  • io (IO) -- an object that acts as an IO.
def initialize(io)
  @io = io
  @io.set_encoding(Encoding::BINARY)
end

def write(bytes)

Returns:
  • (nil) -

Parameters:
  • bytes (String) --
def write(bytes)
  @io.write(bytes)
  nil
end

def write_array(array, &block)

Returns:
  • (nil) -

Parameters:
  • array (Array) --
def write_array(array, &block)
  if array.nil?
    # An array can be null, which is different from it being empty.
    write_int32(-1)
  else
    write_int32(array.size)
    array.each(&block)
  end
end

def write_boolean(boolean)

Returns:
  • (nil) -

Parameters:
  • boolean (Boolean) --
def write_boolean(boolean)
  boolean ? write_int8(1) : write_int8(0)
end

def write_bytes(bytes)

Returns:
  • (nil) -

Parameters:
  • bytes (String) --
def write_bytes(bytes)
  if bytes.nil?
    write_int32(-1)
  else
    write_int32(bytes.bytesize)
    write(bytes)
  end
end

def write_int16(int)

Returns:
  • (nil) -

Parameters:
  • int (Integer) --
def write_int16(int)
  write([int].pack("s>"))
end

def write_int32(int)

Returns:
  • (nil) -

Parameters:
  • int (Integer) --
def write_int32(int)
  write([int].pack("l>"))
end

def write_int64(int)

Returns:
  • (nil) -

Parameters:
  • int (Integer) --
def write_int64(int)
  write([int].pack("q>"))
end

def write_int8(int)

Returns:
  • (nil) -

Parameters:
  • int (Integer) --
def write_int8(int)
  write([int].pack("C"))
end

def write_string(string)

Returns:
  • (nil) -

Parameters:
  • string (String) --
def write_string(string)
  if string.nil?
    write_int16(-1)
  else
    write_int16(string.bytesize)
    write(string)
  end
end