class Sidekiq::Dry::Server::DeserializationMiddleware

Middleware which instantiates `Dry::Struct` hash arguments

Public Instance Methods

call(_worker, job, _queue) { || ... } click to toggle source
# File lib/sidekiq/dry/server/deserialization_middleware.rb, line 8
def call(_worker, job, _queue)
  original_args = job['args']

  job['args'] = job['args'].map do |arg|
    # Only mutate Dry::Struct hashes
    next arg unless struct?(arg)

    to_struct(arg)
  end

  yield
rescue Exception => _ex
  # Other middlewares will see the Hash arguments
  # which might be handled more predictably in cases
  # like exception tracking where the job arguments
  # commonly get processed to redact sensitive info
  job['args'] = original_args

  raise
end

Private Instance Methods

struct?(arg) click to toggle source
# File lib/sidekiq/dry/server/deserialization_middleware.rb, line 31
def struct?(arg)
  arg.is_a?(Hash) && arg.key?('_type')
end
to_struct(arg) click to toggle source
# File lib/sidekiq/dry/server/deserialization_middleware.rb, line 35
def to_struct(arg)
  arg['_type'].constantize.new(arg.except('_type').deep_symbolize_keys)
end