...

Source file src/net/http/clone.go

Documentation: net/http

		 1  // Copyright 2019 The Go Authors. All rights reserved.
		 2  // Use of this source code is governed by a BSD-style
		 3  // license that can be found in the LICENSE file.
		 4  
		 5  package http
		 6  
		 7  import (
		 8  	"mime/multipart"
		 9  	"net/textproto"
		10  	"net/url"
		11  )
		12  
		13  func cloneURLValues(v url.Values) url.Values {
		14  	if v == nil {
		15  		return nil
		16  	}
		17  	// http.Header and url.Values have the same representation, so temporarily
		18  	// treat it like http.Header, which does have a clone:
		19  	return url.Values(Header(v).Clone())
		20  }
		21  
		22  func cloneURL(u *url.URL) *url.URL {
		23  	if u == nil {
		24  		return nil
		25  	}
		26  	u2 := new(url.URL)
		27  	*u2 = *u
		28  	if u.User != nil {
		29  		u2.User = new(url.Userinfo)
		30  		*u2.User = *u.User
		31  	}
		32  	return u2
		33  }
		34  
		35  func cloneMultipartForm(f *multipart.Form) *multipart.Form {
		36  	if f == nil {
		37  		return nil
		38  	}
		39  	f2 := &multipart.Form{
		40  		Value: (map[string][]string)(Header(f.Value).Clone()),
		41  	}
		42  	if f.File != nil {
		43  		m := make(map[string][]*multipart.FileHeader)
		44  		for k, vv := range f.File {
		45  			vv2 := make([]*multipart.FileHeader, len(vv))
		46  			for i, v := range vv {
		47  				vv2[i] = cloneMultipartFileHeader(v)
		48  			}
		49  			m[k] = vv2
		50  		}
		51  		f2.File = m
		52  	}
		53  	return f2
		54  }
		55  
		56  func cloneMultipartFileHeader(fh *multipart.FileHeader) *multipart.FileHeader {
		57  	if fh == nil {
		58  		return nil
		59  	}
		60  	fh2 := new(multipart.FileHeader)
		61  	*fh2 = *fh
		62  	fh2.Header = textproto.MIMEHeader(Header(fh.Header).Clone())
		63  	return fh2
		64  }
		65  
		66  // cloneOrMakeHeader invokes Header.Clone but if the
		67  // result is nil, it'll instead make and return a non-nil Header.
		68  func cloneOrMakeHeader(hdr Header) Header {
		69  	clone := hdr.Clone()
		70  	if clone == nil {
		71  		clone = make(Header)
		72  	}
		73  	return clone
		74  }
		75  

View as plain text