class Tapioca::Dsl::Compilers::SidekiqWorker
def decorate
@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