module Tins::HashSymbolizeKeysRecursive

def _symbolize_keys_recursive(object, circular: nil)

def _symbolize_keys_recursive(object, circular: nil)
  case
  when seen[object.__id__]
    circular != nil and object = circular
  when Hash === object
    seen[object.__id__] = true
    result = {}
    object.each do |k, v|
      result[k.to_s.to_sym] = _symbolize_keys_recursive(v, circular: circular)
    end
    object.replace result
  when Array === object
    seen[object.__id__] = true
    object.map! do |v|
      _symbolize_keys_recursive(v, circular: circular)
    end
  end
  object
end