From 43de4173d56f581a3bdcdd12154b9f9d04a7697f Mon Sep 17 00:00:00 2001 From: yuyabe Date: Sat, 1 Feb 2014 22:06:11 -0800 Subject: exported Mux() --- core.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/core.go b/core.go index 0ef5590..b90e2ec 100644 --- a/core.go +++ b/core.go @@ -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()) } -- cgit