github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/pkg/plugins/transport/transport.go (about)

     1  package transport // import "github.com/demonoid81/moby/pkg/plugins/transport"
     2  
     3  import (
     4  	"io"
     5  	"net/http"
     6  	"strings"
     7  )
     8  
     9  // VersionMimetype is the Content-Type the engine sends to plugins.
    10  const VersionMimetype = "application/vnd.docker.plugins.v1.2+json"
    11  
    12  // RequestFactory defines an interface that
    13  // transports can implement to create new requests.
    14  type RequestFactory interface {
    15  	NewRequest(path string, data io.Reader) (*http.Request, error)
    16  }
    17  
    18  // Transport defines an interface that plugin transports
    19  // must implement.
    20  type Transport interface {
    21  	http.RoundTripper
    22  	RequestFactory
    23  }
    24  
    25  // newHTTPRequest creates a new request with a path and a body.
    26  func newHTTPRequest(path string, data io.Reader) (*http.Request, error) {
    27  	if !strings.HasPrefix(path, "/") {
    28  		path = "/" + path
    29  	}
    30  	req, err := http.NewRequest(http.MethodPost, path, data)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  	req.Header.Add("Accept", VersionMimetype)
    35  	return req, nil
    36  }