func InsertMetrics(h *servertiming.Header, headers http.Header) {
	more, err := servertiming.ParseHeader(headers.Get(servertiming.HeaderKey))
	if err != nil {
		return
	}
	h.Metrics = append(more.Metrics, h.Metrics...)
}
InsertMetrics inserts to servertiming header metrics from an HTTP header of another request
They are prepended since they happened before the metrics of the header itself
package clienttiming
import (
	"context"
	"net/http"
	"strconv"
	"strings"
	"github.com/mitchellh/go-server-timing"
)
const KeySource = "source"
func (t *Timer) Transport(ctx context.Context, opts ...Option) http.RoundTripper {
	tr := &transport{
		Timer:  *t,
		timing: servertiming.FromContext(ctx),
	}
	for _, opt := range opts {
		opt(&tr.Timer)
	}
	return tr
}
func (t *Timer) Client(ctx context.Context, opts ...Option) *http.Client {
	return &http.Client{Transport: t.Transport(ctx, opts...)}
}
type transport struct {
	Timer
	timing *servertiming.Header
}
func (t *transport) RoundTrip(req *http.Request) (*http.Response, error) {
	metric := t.timing.NewMetric(t.metric(req)).WithDesc(t.desc(req))
	if metric.Extra == nil {
		metric.Extra = make(map[string]string)
	}
	if t.name != "" {
		metric.Extra[KeySource] = t.name
	}
	metric.Start()
	resp, err := t.inner.RoundTrip(req)
	metric.Stop()
	t.update(metric, resp, err)
	if err != nil {
		return nil, err
	}
	InsertMetrics(t.timing, resp.Header)
	return resp, err
}