require "global_id" module Sidekiq module GlobalIDMiddleware class Processor def call(_worker_class, job, *) job["args"].map!(&method(:process)) yield end def process(argument) argument end end class Deserializer < Processor def process(argument) if argument.to_s.start_with?("gid://") GlobalID::Locator.locate(argument) else argument end end end class Serializer < Processor def process(argument) if argument.respond_to?(:to_global_id) argument.to_global_id.to_s else argument end end end end server_middleware do |chain| chain.prepend GlobalIDMiddleware::Deserializer end client_middleware do |chain| chain.prepend GlobalIDMiddleware::Serializer end end