code: func InstrumentHandlerWithOpts(opts SummaryOpts, handler http.Handler) http.HandlerFunc {
  	return InstrumentHandlerFuncWithOpts(opts, handler.ServeHTTP)
  }
docs: // InstrumentHandlerWithOpts works like InstrumentHandler (and shares the same
  // issues) but provides more flexibility (at the cost of a more complex call
  // syntax). As InstrumentHandler, this function registers four metric
  // collectors, but it uses the provided SummaryOpts to create them. However, the
  // fields "Name" and "Help" in the SummaryOpts are ignored. "Name" is replaced
  // by "requests_total", "request_duration_microseconds", "request_size_bytes",
  // and "response_size_bytes", respectively. "Help" is replaced by an appropriate
  // help string. The names of the variable labels of the http_requests_total
  // CounterVec are "method" (get, post, etc.), and "code" (HTTP status code).
  //
  // If InstrumentHandlerWithOpts is called as follows, it mimics exactly the
  // behavior of InstrumentHandler:
  //
  //     prometheus.InstrumentHandlerWithOpts(
  //         prometheus.SummaryOpts{
  //              Subsystem:   "http",
  //              ConstLabels: prometheus.Labels{"handler": handlerName},
  //         },
  //         handler,
  //     )
  //
  // Technical detail: "requests_total" is a CounterVec, not a SummaryVec, so it
  // cannot use SummaryOpts. Instead, a CounterOpts struct is created internally,
  // and all its fields are set to the equally named fields in the provided
  // SummaryOpts.
  //
  // Deprecated: InstrumentHandlerWithOpts is deprecated for the same reasons as
  // InstrumentHandler is. Use the tooling provided in package promhttp instead.