github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/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 }