class Tapioca::Dsl::Compilers::SidekiqWorker

def decorate

: -> void
@override
def decorate
  return unless constant.instance_methods.include?(:perform)
  root.create_path(constant) do |worker|
    method_def = constant.instance_method(:perform)
    async_params = compile_method_parameters_to_rbi(method_def)
    # `perform_at` and is just an alias for `perform_in` so both methods technically
    # accept a datetime, time, or numeric but we're typing them differently so they
    # semantically make sense.
    at_return_type = if defined?(ActiveSupport::TimeWithZone)
      "T.any(DateTime, Time, ActiveSupport::TimeWithZone)"
    else
      "T.any(DateTime, Time)"
    end
    at_params = [
      create_param("interval", type: at_return_type),
      *async_params,
    ]
    in_return_type = if defined?(ActiveSupport::Duration)
      "T.any(Numeric, ActiveSupport::Duration)"
    else
      "Numeric"
    end
    in_params = [
      create_param("interval", type: in_return_type),
      *async_params,
    ]
    generate_perform_method(worker, "perform_async", async_params)
    generate_perform_method(worker, "perform_at", at_params)
    generate_perform_method(worker, "perform_in", in_params)
  end
end