cuelang.org/go@v0.10.1/internal/cueversion/transport.go (about)

     1  package cueversion
     2  
     3  import (
     4  	"maps"
     5  	"net/http"
     6  )
     7  
     8  // NewTransport returns an [http.RoundTripper] implementation
     9  // that wraps next and adds a "User-Agent" header to every
    10  // HTTP request containing the result of UserAgent(clientType).
    11  // If next is nil, [http.DefaultTransport] will be used.
    12  func NewTransport(clientType string, next http.RoundTripper) http.RoundTripper {
    13  	if next == nil {
    14  		next = http.DefaultTransport
    15  	}
    16  	return &userAgentTransport{
    17  		next:      next,
    18  		userAgent: UserAgent(clientType),
    19  	}
    20  }
    21  
    22  type userAgentTransport struct {
    23  	next      http.RoundTripper
    24  	userAgent string
    25  }
    26  
    27  func (t *userAgentTransport) RoundTrip(req *http.Request) (*http.Response, error) {
    28  	// RoundTrip isn't allowed to modify the request, but we
    29  	// can avoid doing a full clone.
    30  	req1 := *req
    31  	req1.Header = maps.Clone(req.Header)
    32  	req1.Header.Set("User-Agent", t.userAgent)
    33  	return t.next.RoundTrip(&req1)
    34  }