package router import ( "errors" "net/http" "golang.org/x/net/context" apierrors "github.com/docker/docker/api/errors" "github.com/docker/docker/api/server/httputils" ) var ( errExperimentalFeature = errors.New("This experimental feature is disabled by default. Start the Docker daemon with --experimental in order to enable it.") ) // ExperimentalRoute defines an experimental API route that can be enabled or disabled. type ExperimentalRoute interface { Route Enable() Disable() } // experimentalRoute defines an experimental API route that can be enabled or disabled. // It implements ExperimentalRoute type experimentalRoute struct { local Route handler httputils.APIFunc } // Enable enables this experimental route func (r *experimentalRoute) Enable() { r.handler = r.local.Handler() } // Disable disables the experimental route func (r *experimentalRoute) Disable() { r.handler = experimentalHandler } func experimentalHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { return apierrors.NewErrorWithStatusCode(errExperimentalFeature, http.StatusNotImplemented) } // Handler returns returns the APIFunc to let the server wrap it in middlewares. func (r *experimentalRoute) Handler() httputils.APIFunc { return r.handler } // Method returns the http method that the route responds to. func (r *experimentalRoute) Method() string { return r.local.Method() } // Path returns the subpath where the route responds to. func (r *experimentalRoute) Path() string { return r.local.Path() } // Experimental will mark a route as experimental. func Experimental(r Route) Route { return &experimentalRoute{ local: r, handler: experimentalHandler, } }