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 }