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