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)
-
(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)
-
io
(IO
) -- an object that acts as an IO.
def initialize(io) @io = io @io.set_encoding(Encoding::BINARY) end
def write(bytes)
-
(nil)
-
Parameters:
-
bytes
(String
) --
def write(bytes) @io.write(bytes) nil end
def write_array(array, &block)
-
(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)
-
(nil)
-
Parameters:
-
boolean
(Boolean
) --
def write_boolean(boolean) boolean ? write_int8(1) : write_int8(0) end
def write_bytes(bytes)
-
(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)
-
(nil)
-
Parameters:
-
int
(Integer
) --
def write_int16(int) write([int].pack("s>")) end
def write_int32(int)
-
(nil)
-
Parameters:
-
int
(Integer
) --
def write_int32(int) write([int].pack("l>")) end
def write_int64(int)
-
(nil)
-
Parameters:
-
int
(Integer
) --
def write_int64(int) write([int].pack("q>")) end
def write_int8(int)
-
(nil)
-
Parameters:
-
int
(Integer
) --
def write_int8(int) write([int].pack("C")) end
def write_string(string)
-
(nil)
-
Parameters:
-
string
(String
) --
def write_string(string) if string.nil? write_int16(-1) else write_int16(string.bytesize) write(string) end end