Sha256: 3971b3f8763f0360bbdab5c934fd7bad7ed8e13a5b5eb3d22eeb46aaeee76348

Contents?: true

Size: 976 Bytes

Versions: 4

Compression:

Stored size: 976 Bytes

Contents

require 'protobuf/common/wire_type'

module Protobuf
  class NotInitializedError < StandardError; end

  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)
      raise NotInitializedError unless message.initialized?
      message.each_field do |field, value|
        next unless message.has_field?(field.name)

        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.encode key
      stream.write key_bytes
      bytes = field.get value
      stream.write bytes
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
macks-ruby_protobuf-0.3.2.2 lib/protobuf/message/encoder.rb
macks-ruby_protobuf-0.3.2.3 lib/protobuf/message/encoder.rb
macks-ruby_protobuf-0.3.3 lib/protobuf/message/encoder.rb
ruby_protobuf-0.3.3 lib/protobuf/message/encoder.rb