class Semian::CircuitBreaker

def initialize(name, exceptions:, success_threshold:, error_threshold:,

def initialize(name, exceptions:, success_threshold:, error_threshold:,
  error_timeout:, implementation:, half_open_resource_timeout: nil,
  error_threshold_timeout: nil)
  @name = name.to_sym
  @success_count_threshold = success_threshold
  @error_count_threshold = error_threshold
  @error_threshold_timeout = error_threshold_timeout || error_timeout
  @error_timeout = error_timeout
  @exceptions = exceptions
  @half_open_resource_timeout = half_open_resource_timeout
  @errors = implementation::SlidingWindow.new(max_size: @error_count_threshold)
  @successes = implementation::Integer.new
  @state = implementation::State.new
  reset
end