Sha256: 206b628e67a82e5a16dd7a3bb6218a11131deb81671b1ddcb2574b47520497c2

Contents?: true

Size: 851 Bytes

Versions: 3

Compression:

Stored size: 851 Bytes

Contents

require 'protobuf/common/wire_type'

module Protobuf
  class Encoder
    class <<self
      def encode(stream, message)
        self.new(stream, message).encode
      end
    end

    def initialize(stream=nil, message=nil)
      @stream, @message = stream, message
    end

    def encode(stream=@stream, message=@message)
      message.each_field do |field, value|
        next unless value # TODO

        if field.repeated?
          value.each do |val|
            write_pair field, val, stream
          end
        else
          write_pair field, value, stream
        end
      end
    end

    def write_pair(field, value, stream)
      key = (field.tag << 3) | field.wire_type
      key_bytes = Protobuf::Field::VarintField.get_bytes key
      stream.write key_bytes
      bytes = field.get value
      stream.write bytes
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ruby_protobuf-0.3.0 lib/protobuf/message/encoder.rb
ruby_protobuf-0.2.0 lib/protobuf/message/encoder.rb
ruby_protobuf-0.3.2 lib/protobuf/message/encoder.rb