diff options
author | yuyabe <yuyabee@gmail.com> | 2014-02-01 22:06:11 -0800 |
---|---|---|
committer | yuyabe <yuyabee@gmail.com> | 2014-02-01 22:08:40 -0800 |
commit | 43de4173d56f581a3bdcdd12154b9f9d04a7697f (patch) | |
tree | de9da044ac6a8f263cf0d607a0a0d197140ab252 | |
parent | remove tests.test (diff) | |
download | sleepy-43de4173d56f581a3bdcdd12154b9f9d04a7697f.tar.gz sleepy-43de4173d56f581a3bdcdd12154b9f9d04a7697f.tar.bz2 sleepy-43de4173d56f581a3bdcdd12154b9f9d04a7697f.zip |
exported Mux()
-rw-r--r-- | core.go | 23 |
1 files changed, 16 insertions, 7 deletions
@@ -46,7 +46,8 @@ type DeleteSupported interface { // You can instantiate multiple APIs on separate ports. Each API // will manage its own set of resources. type API struct { - mux *http.ServeMux + muxPointer *http.ServeMux + muxInitialized bool } // NewAPI allocates and returns a new API. @@ -100,23 +101,31 @@ func (api *API) requestHandler(resource interface{}) http.HandlerFunc { } } +// singleton mux +func (api *API) Mux() *http.ServeMux { + if api.muxInitialized { + return api.muxPointer + } else { + api.muxPointer = http.NewServeMux() + api.muxInitialized = true + return api.muxPointer + } +} + // AddResource adds a new resource to an API. The API will route // requests that match one of the given paths to the matching HTTP // method on the resource. func (api *API) AddResource(resource interface{}, paths ...string) { - if api.mux == nil { - api.mux = http.NewServeMux() - } for _, path := range paths { - api.mux.HandleFunc(path, api.requestHandler(resource)) + api.Mux().HandleFunc(path, api.requestHandler(resource)) } } // Start causes the API to begin serving requests on the given port. func (api *API) Start(port int) error { - if api.mux == nil { + if !api.muxInitialized { return errors.New("You must add at least one resource to this API.") } portString := fmt.Sprintf(":%d", port) - return http.ListenAndServe(portString, api.mux) + return http.ListenAndServe(portString, api.Mux()) } |