diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2020-04-13 09:48:54 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2020-04-13 09:48:54 -0600 |
commit | ec456811bb6d61ce32dbe6e4b7580d383f8a4adf (patch) | |
tree | 4d49b468e1677584f47262aafa849b43133d6603 | |
parent | 68cebb28d063a7a71705ce022f118b5e1205fa3f (diff) |
core: Don't return error on RegisterModule() and RegisterAdapter()
These functions are called at init-time, and their inputs are hard-coded
so there are no environmental or user factors that could make it fail
or succeed; the error return values are often ignored, and when they're
not, they are usually a fatal error anyway. To ensure that a programmer
mistake is not missed, we now panic instead.
Last breaking change 🤞
-rw-r--r-- | caddyconfig/configadapters.go | 9 | ||||
-rw-r--r-- | modules.go | 19 | ||||
-rw-r--r-- | modules/caddyhttp/app.go | 5 | ||||
-rw-r--r-- | modules/caddyhttp/caddyhttp.go | 5 |
4 files changed, 16 insertions, 22 deletions
diff --git a/caddyconfig/configadapters.go b/caddyconfig/configadapters.go index 96d7e10..2c466c4 100644 --- a/caddyconfig/configadapters.go +++ b/caddyconfig/configadapters.go @@ -101,13 +101,14 @@ func JSONIndent(val interface{}) ([]byte, error) { } // RegisterAdapter registers a config adapter with the given name. -// This should usually be done at init-time. -func RegisterAdapter(name string, adapter Adapter) error { +// This should usually be done at init-time. It panics if the +// adapter cannot be registered successfully. +func RegisterAdapter(name string, adapter Adapter) { if _, ok := configAdapters[name]; ok { - return fmt.Errorf("%s: already registered", name) + panic(fmt.Errorf("%s: already registered", name)) } configAdapters[name] = adapter - return caddy.RegisterModule(adapterModule{name, adapter}) + caddy.RegisterModule(adapterModule{name, adapter}) } // GetAdapter returns the adapter with the given name, @@ -125,33 +125,32 @@ type ModuleMap map[string]json.RawMessage // be properly recorded, this should be called in the // init phase of runtime. Typically, the module package // will do this as a side-effect of being imported. -// This function returns an error if the module's info -// is incomplete or invalid, or if the module is -// already registered. -func RegisterModule(instance Module) error { +// This function panics if the module's info is +// incomplete or invalid, or if the module is already +// registered. +func RegisterModule(instance Module) { mod := instance.CaddyModule() if mod.ID == "" { - return fmt.Errorf("module ID missing") + panic("module ID missing") } if mod.ID == "caddy" || mod.ID == "admin" { - return fmt.Errorf("module ID '%s' is reserved", mod.ID) + panic(fmt.Sprintf("module ID '%s' is reserved", mod.ID)) } if mod.New == nil { - return fmt.Errorf("missing ModuleInfo.New") + panic("missing ModuleInfo.New") } if val := mod.New(); val == nil { - return fmt.Errorf("ModuleInfo.New must return a non-nil module instance") + panic("ModuleInfo.New must return a non-nil module instance") } modulesMu.Lock() defer modulesMu.Unlock() if _, ok := modules[string(mod.ID)]; ok { - return fmt.Errorf("module already registered: %s", mod.ID) + panic(fmt.Sprintf("module already registered: %s", mod.ID)) } modules[string(mod.ID)] = mod - return nil } // GetModule returns module information from its ID (full name). diff --git a/modules/caddyhttp/app.go b/modules/caddyhttp/app.go index 292f934..8e7f3ea 100644 --- a/modules/caddyhttp/app.go +++ b/modules/caddyhttp/app.go @@ -30,10 +30,7 @@ import ( ) func init() { - err := caddy.RegisterModule(App{}) - if err != nil { - caddy.Log().Fatal(err.Error()) - } + caddy.RegisterModule(App{}) } // App is a robust, production-ready HTTP server. diff --git a/modules/caddyhttp/caddyhttp.go b/modules/caddyhttp/caddyhttp.go index 6666d3e..6dbf773 100644 --- a/modules/caddyhttp/caddyhttp.go +++ b/modules/caddyhttp/caddyhttp.go @@ -30,10 +30,7 @@ import ( func init() { weakrand.Seed(time.Now().UnixNano()) - err := caddy.RegisterModule(tlsPlaceholderWrapper{}) - if err != nil { - caddy.Log().Fatal(err.Error()) - } + caddy.RegisterModule(tlsPlaceholderWrapper{}) } // RequestMatcher is a type that can match to a request. |