mirror of
https://github.com/LukeHagar/plexruby.git
synced 2025-12-06 12:47:44 +00:00
96 lines
3.1 KiB
Ruby
96 lines
3.1 KiB
Ruby
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
|
|
# typed: true
|
|
# frozen_string_literal: true
|
|
|
|
require 'faraday/retry'
|
|
require 'sorbet-runtime'
|
|
|
|
module PlexRubySDK
|
|
module Utils
|
|
class BackoffStrategy
|
|
extend T::Sig
|
|
|
|
sig { returns(T.nilable(::Float)) }
|
|
attr_accessor :exponent
|
|
|
|
sig { returns(T.nilable(::Integer)) }
|
|
attr_accessor :initial_interval
|
|
|
|
sig { returns(T.nilable(::Integer)) }
|
|
attr_accessor :max_elapsed_time
|
|
|
|
sig { returns(T.nilable(::Integer)) }
|
|
attr_accessor :max_interval
|
|
|
|
sig do
|
|
params(
|
|
exponent: T.nilable(::Float),
|
|
initial_interval: T.nilable(::Integer),
|
|
max_elapsed_time: T.nilable(::Integer),
|
|
max_interval: T.nilable(::Integer)
|
|
).void
|
|
end
|
|
def initialize(exponent: nil, initial_interval: nil, max_elapsed_time: nil, max_interval: nil)
|
|
@exponent = T.let(exponent, T.nilable(::Float))
|
|
@initial_interval = T.let(initial_interval, T.nilable(::Integer))
|
|
@max_elapsed_time = T.let(max_elapsed_time, T.nilable(::Integer))
|
|
@max_interval = T.let(max_interval, T.nilable(::Integer))
|
|
end
|
|
end
|
|
|
|
class RetryConfig
|
|
extend T::Sig
|
|
|
|
sig { returns(T.nilable(BackoffStrategy)) }
|
|
attr_accessor :backoff
|
|
|
|
sig { returns(T.nilable(T::Boolean)) }
|
|
attr_accessor :retry_connection_errors
|
|
|
|
sig { returns(T.nilable(::String)) }
|
|
attr_accessor :strategy
|
|
|
|
sig do
|
|
params(
|
|
backoff: T.nilable(BackoffStrategy),
|
|
retry_connection_errors: T.nilable(T::Boolean),
|
|
strategy: T.nilable(::String)
|
|
).void
|
|
end
|
|
def initialize(backoff: nil, retry_connection_errors: nil, strategy: nil)
|
|
@backoff = T.let(backoff, T.nilable(BackoffStrategy))
|
|
@retry_connection_errors = T.let(retry_connection_errors, T.nilable(T::Boolean))
|
|
@strategy = T.let(strategy, T.nilable(::String))
|
|
end
|
|
|
|
sig { params(initial_time: ::Time).returns(::Hash) }
|
|
def to_faraday_retry_options(initial_time:)
|
|
retry_options = {
|
|
# must overwrite default max of 2 retries and it must be positive
|
|
max: 1_000_000_000,
|
|
# ensure all HTTP methods are retried, especially via retry_if
|
|
methods: [],
|
|
}
|
|
|
|
if @retry_connection_errors
|
|
retry_options[:exceptions] = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
|
|
end
|
|
|
|
if @strategy == 'backoff' && @backoff
|
|
retry_options[:backoff_factor] = @backoff.exponent unless @backoff.exponent.nil?
|
|
retry_options[:interval] = (@backoff.initial_interval.to_f / 1000) unless @backoff.initial_interval.nil?
|
|
retry_options[:max_interval] = @backoff.max_interval unless @backoff.max_interval.nil?
|
|
|
|
unless @backoff.max_elapsed_time.nil?
|
|
stop_time = initial_time + (@backoff.max_elapsed_time.to_f / 1000)
|
|
retry_options[:retry_if] = ->(_env, _exc) { Time.now < stop_time }
|
|
end
|
|
end
|
|
|
|
retry_options
|
|
end
|
|
end
|
|
end
|
|
end
|