Module: AnyCable::Rack::Coders::Protobuf

Defined in:
lib/anycable/rack/coders/protobuf.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.decode(bin) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/anycable/rack/coders/protobuf.rb', line 12

def decode(bin)
  decoded_message = ActionCable::Message.decode(bin).to_h

  decoded_message[:command] = decoded_message[:command].to_s
  if decoded_message[:message].present?
    decoded_message[:message] = Msgpack.decode(decoded_message[:message])
  end

  decoded_message.each_with_object({}) { |(k, v), h| h[k.to_s] = v }
end

.encode(ruby_obj) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/anycable/rack/coders/protobuf.rb', line 23

def encode(ruby_obj)
  message = ruby_obj.delete(:message)

  data = ActionCable::Message.new(ruby_obj)

  if message
    data.message = Msgpack.encode(message, binary_frame_wrap: false)
  end

  BinaryFrame.new(ActionCable::Message.encode(data))
end