class Prototok::Encoders::Protobuf

Constants

PROTOBUF_DEFAULTS

Public Class Methods

options() click to toggle source
Calls superclass method Prototok::Encoders::Base#options
# File lib/prototok/encoders/protobuf.rb, line 34
def self.options
  @options ||= super.merge!(PROTOBUF_DEFAULTS)
end

Private Class Methods

payload_class(opts) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 52
def self.payload_class(opts)
  @cache ||= {}
  @cache[opts] ||= begin
    existing = try_get_existed(opts[:payload_class])
    return existing unless existing.nil?
    unless opts[:payload_file]
      Prototok.send :err, Errors::ConfigurationError, 'no_payload_proto_file'
    end
    Prototok::Utils::Protoc.process(opts[:payload_file])
    Object.const_get opts[:payload_class], false
  end
end
try_get_existed(klass_name) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 65
def self.try_get_existed(klass_name)
  Object.const_get klass_name, false
rescue NameError
  nil
end

Public Instance Methods

decode_payload(str) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 30
def decode_payload str
  payload_class.decode(str)
end
decode_token(str) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 17
def decode_token str
  decoded_token = Prototok::Protobuf::Token.decode(str)
  payload = decoded_token.payload.unpack(payload_class)
  token = deserialize(decoded_token.to_h)
  token.payload = payload
  token
end
encode_payload(payload) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 25
def encode_payload payload
  payload = payload_class.new(payload.to_h.reject { |_, v| v.nil? })
  payload_class.encode(payload)
end
encode_token(payload, **header) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 11
def encode_token payload, **header
  serialized = serialize(payload, **header)
  prepared_token = prepare_token(serialized)
  prepared_token.class.encode(prepared_token)
end

Private Instance Methods

payload_class() click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 48
def payload_class
  self.class.payload_class(options)
end
prepare_token(serialized_token) click to toggle source
# File lib/prototok/encoders/protobuf.rb, line 40
def prepare_token serialized_token
  payload = payload_class.new(serialized_token[:payload] || {})
  any = Google::Protobuf::Any.new
  any.pack payload
  serialized_token[:payload] = any
  Prototok::Protobuf::Token.new(serialized_token)
end