Sha256: 5ac304f8831de28e90b28b37b6a4e3ce72a7a77e2f9623bd0a8c37f982b931f9
Contents?: true
Size: 1.15 KB
Versions: 2
Compression:
Stored size: 1.15 KB
Contents
# frozen_string_literal: true module GrpcKit module Streams module Packable # @params data [String] # @params compress [Boolean] def pack(data, compress = false) c = compress ? 1 : 0 [c, data.size, data].pack('CNa*') end # @params data [String] def unpack(data) if data unpacker.feed(data) end if unpacker.readable? return unpacker.read end nil end def unpacker @unpacker ||= GrpcKit::Streams::Packable::Unpacker.new end class Unpacker # Compressed bytes(1 Byte) + length bytes(4 Bytes) METADATA_SIZE = 5 def initialize @i = 0 @data = nil end def readable? @data && !@data.empty? end def feed(data) if @data @data << data else @data = data end end def read metadata = @data.slice!(0, METADATA_SIZE) c, size = metadata.unpack('CN') data = @data.slice!(0, size) [c != 0, size, data] end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
grpc_kit-0.1.2 | lib/grpc_kit/streams/packable.rb |
grpc_kit-0.1.1 | lib/grpc_kit/streams/packable.rb |