Class: Temporalio::Converters::PayloadConverter::BinaryProtobuf
- Inherits:
-
Encoding
- Object
- Encoding
- Temporalio::Converters::PayloadConverter::BinaryProtobuf
- Defined in:
- lib/temporalio/converters/payload_converter/binary_protobuf.rb
Overview
Encoding for Protobuf values for binary/protobuf encoding.
Constant Summary collapse
- ENCODING =
'binary/protobuf'
Instance Method Summary collapse
-
#encoding ⇒ String
Encoding that will be put on the payload metadata if this encoding converter can handle the value.
-
#from_payload(payload) ⇒ Object
Convert the payload to a Ruby value.
-
#to_payload(value) ⇒ Api::Common::V1::Payload?
Convert value to payload if this encoding converter can handle it, or return
nil.
Instance Method Details
#encoding ⇒ String
Returns Encoding that will be put on the payload metadata if this encoding converter can handle the value.
15 16 17 |
# File 'lib/temporalio/converters/payload_converter/binary_protobuf.rb', line 15 def encoding ENCODING end |
#from_payload(payload) ⇒ Object
Convert the payload to a Ruby value. The caller confirms the encoding metadata matches #encoding, so this will error if it cannot convert.
31 32 33 34 35 36 37 38 |
# File 'lib/temporalio/converters/payload_converter/binary_protobuf.rb', line 31 def from_payload(payload) type = payload.['messageType'] # @type var desc: untyped desc = Google::Protobuf::DescriptorPool.generated_pool.lookup(type) raise "No protobuf message found in global pool for message type #{type}" unless desc desc.msgclass.decode(payload.data) end |
#to_payload(value) ⇒ Api::Common::V1::Payload?
Convert value to payload if this encoding converter can handle it, or return nil. If the converter can handle it, the resulting payload must have encoding metadata on the payload set to the value of #encoding.
20 21 22 23 24 25 26 27 28 |
# File 'lib/temporalio/converters/payload_converter/binary_protobuf.rb', line 20 def to_payload(value) return nil unless value.is_a?(Google::Protobuf::MessageExts) # @type var value: Google::Protobuf::MessageExts Api::Common::V1::Payload.new( metadata: { 'encoding' => ENCODING, 'messageType' => value.class.descriptor.name }, data: value.to_proto ) end |