dotcloud/docker

View on GitHub
api/server/router/experimental.go

Summary

Maintainability
A
0 mins
Test Coverage
package router // import "github.com/docker/docker/api/server/router"

import (
    "context"
    "net/http"

    "github.com/docker/docker/api/server/httputils"
)

// 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
}

type notImplementedError struct{}

func (notImplementedError) Error() string {
    return "This experimental feature is disabled by default. Start the Docker daemon in experimental mode in order to enable it."
}

func (notImplementedError) NotImplemented() {}

func experimentalHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    return notImplementedError{}
}

// Handler 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,
    }
}