github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/api/server/router/experimental.go (about)

     1  package router // import "github.com/docker/docker/api/server/router"
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  
     7  	"github.com/docker/docker/api/server/httputils"
     8  )
     9  
    10  // ExperimentalRoute defines an experimental API route that can be enabled or disabled.
    11  type ExperimentalRoute interface {
    12  	Route
    13  
    14  	Enable()
    15  	Disable()
    16  }
    17  
    18  // experimentalRoute defines an experimental API route that can be enabled or disabled.
    19  // It implements ExperimentalRoute
    20  type experimentalRoute struct {
    21  	local   Route
    22  	handler httputils.APIFunc
    23  }
    24  
    25  // Enable enables this experimental route
    26  func (r *experimentalRoute) Enable() {
    27  	r.handler = r.local.Handler()
    28  }
    29  
    30  // Disable disables the experimental route
    31  func (r *experimentalRoute) Disable() {
    32  	r.handler = experimentalHandler
    33  }
    34  
    35  type notImplementedError struct{}
    36  
    37  func (notImplementedError) Error() string {
    38  	return "This experimental feature is disabled by default. Start the Docker daemon in experimental mode in order to enable it."
    39  }
    40  
    41  func (notImplementedError) NotImplemented() {}
    42  
    43  func experimentalHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    44  	return notImplementedError{}
    45  }
    46  
    47  // Handler returns the APIFunc to let the server wrap it in middlewares.
    48  func (r *experimentalRoute) Handler() httputils.APIFunc {
    49  	return r.handler
    50  }
    51  
    52  // Method returns the http method that the route responds to.
    53  func (r *experimentalRoute) Method() string {
    54  	return r.local.Method()
    55  }
    56  
    57  // Path returns the subpath where the route responds to.
    58  func (r *experimentalRoute) Path() string {
    59  	return r.local.Path()
    60  }
    61  
    62  // Experimental will mark a route as experimental.
    63  func Experimental(r Route) Route {
    64  	return &experimentalRoute{
    65  		local:   r,
    66  		handler: experimentalHandler,
    67  	}
    68  }