Sha256: b1eb4a88bc1c27c2f4b36ff3b455d4fe07fe260eda3ee83b1a7a036ecea72a05

Contents?: true

Size: 1008 Bytes

Versions: 17

Compression:

Stored size: 1008 Bytes

Contents

# frozen_string_literal: true

module RailwayIpc
  module Rabbitmq
    class Payload
      attr_reader :type, :message

      def self.encode(message)
        type = message.class.to_s
        begin
          message = Base64.encode64(message.class.encode(message))
        # TODO: also need to rescue Google::Protobuf::TypeError
        rescue NoMethodError
          raise RailwayIpc::InvalidProtobuf.new("Message #{message} is not a valid protobuf")
        end
        new(type, message).to_json
      end

      def self.decode(message)
        message = JSON.parse(message)
        type = message['type']
        message = Base64.decode64(message['encoded_message'])
        new(type, message)
      end

      def initialize(type, message)
        @type = type
        @message = message
      end

      # rubocop:disable Lint/ToJSON
      def to_json
        {
          type: type,
          encoded_message: message
        }.to_json
      end
      # rubocop:enable Lint/ToJSON
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
railway-ipc-5.1.1 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-5.1.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-5.0.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-4.0.1 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-4.0.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-3.0.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.2.2 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.2.1 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.2.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.1.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.0.3 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.0.2 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.0.1 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-2.0.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-1.1.0 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-1.0.1 lib/railway_ipc/rabbitmq/payload.rb
railway-ipc-1.0.0 lib/railway_ipc/rabbitmq/payload.rb