class GrpcKit::Transport::Packable::Unpacker

Constants

PREFIX_SIZE

Compressed-Flag (1 byte) + Message-Length (4 Bytes)

Public Class Methods

new() click to toggle source
# File lib/grpc_kit/transport/packable.rb, line 30
def initialize
  @data = +''.b
end

Public Instance Methods

data_exist?() click to toggle source

@return [Boolean]

# File lib/grpc_kit/transport/packable.rb, line 35
def data_exist?
  !@data.empty?
end
feed(data) click to toggle source

@param data [String] @return [void]

# File lib/grpc_kit/transport/packable.rb, line 41
def feed(data)
  @data << data
end
read() click to toggle source

@return [nil, Array<Boolean, Integer, String>]

# File lib/grpc_kit/transport/packable.rb, line 46
def read
  return nil if @data.bytesize < PREFIX_SIZE

  prefix = @data.byteslice(0, PREFIX_SIZE)
  compressed, length = prefix.unpack('CN')

  return nil if (@data.bytesize-PREFIX_SIZE) < length

  d = @data.freeze
  data = d.byteslice(PREFIX_SIZE, length)
  @data = d.byteslice(PREFIX_SIZE + length, d.bytesize)
  [compressed == 1, length, data]
end