module JSON::ParserOptions

def create_additions_proc(opts)

TODO: exctract :create_additions support to another gem for version 3.0
def create_additions_proc(opts)
  if opts[:symbolize_names]
    raise ArgumentError, "options :symbolize_names and :create_additions cannot be  used in conjunction"
  end
  opts = opts.dup
  create_additions = opts.fetch(:create_additions, false)
  on_load = opts[:on_load]
  object_class = opts[:object_class] || Hash
  opts[:on_load] = ->(object) do
    case object
    when String
      opts[:match_string]&.each do |pattern, klass|
        if match = pattern.match(object)
          create_additions_warning if create_additions.nil?
          object = klass.json_create(object)
          break
        end
      end
    when object_class
      if opts[:create_additions] != false
        if class_name = object[JSON.create_id]
          klass = JSON.deep_const_get(class_name)
          if (klass.respond_to?(:json_creatable?) && klass.json_creatable?) || klass.respond_to?(:json_create)
            create_additions_warning if create_additions.nil?
            object = klass.json_create(object)
          end
        end
      end
    end
    on_load.nil? ? object : on_load.call(object)
  end
  opts
end