Sha256: 0b4a98d19151b6f2773a6273c00e45c55d6f5f3c83fb39dcbbe1f0e426991e73
Contents?: true
Size: 1.1 KB
Versions: 1
Compression:
Stored size: 1.1 KB
Contents
# frozen_string_literal: true module GrpcKit module Transport module Packable # @params data [String] # @params compress [Boolean] def pack(data, compress = false) c = compress ? 1 : 0 [c, data.bytesize, data].pack('CNa*') end # @params data [String] def unpack(data) unpacker.feed(data) if data unpacker.read end def unpacker @unpacker ||= Unpacker.new end class Unpacker # Compressed bytes(1 Byte) + length bytes(4 Bytes) METADATA_SIZE = 5 def initialize @data = +''.b end def data_exist? !@data.empty? end def feed(data) @data << data end def read return nil if @data.empty? d = @data.freeze metadata = d.byteslice(0, METADATA_SIZE) c, size = metadata.unpack('CN') data = @data.byteslice(METADATA_SIZE, size) @data = @data.byteslice(METADATA_SIZE + size, @data.bytesize) [c != 0, size, data] end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
grpc_kit-0.1.8 | lib/grpc_kit/transport/packable.rb |