aboutsummaryrefslogtreecommitdiff
path: root/lib/http/server.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2024-03-08 01:42:11 +0700
committerShulhan <ms@kilabit.info>2024-03-09 01:10:24 +0700
commit8007793b86bac3ca0bf937fe246deae5ac46a503 (patch)
treef9297531956f219223b56b5d6730690af64a428c /lib/http/server.go
parent6653805a0949eafc4a478749842d61b12ef5916a (diff)
downloadpakakeh.go-8007793b86bac3ca0bf937fe246deae5ac46a503.tar.xz
lib/http: refactor of RegisterEndpoint and RegisterSSE to non-pointer
Once the endpoint registered, the caller should not able to changes any values on endpoint again.
Diffstat (limited to 'lib/http/server.go')
-rw-r--r--lib/http/server.go34
1 files changed, 18 insertions, 16 deletions
diff --git a/lib/http/server.go b/lib/http/server.go
index e26fe082..d2e69ecc 100644
--- a/lib/http/server.go
+++ b/lib/http/server.go
@@ -95,42 +95,43 @@ func (srv *Server) RedirectTemp(res http.ResponseWriter, redirectURL string) {
//
// Endpoint with Method CONNECT or TRACE will return an error because its
// not supported, yet.
-func (srv *Server) RegisterEndpoint(ep *Endpoint) (err error) {
- if ep == nil {
- return nil
- }
+func (srv *Server) RegisterEndpoint(ep Endpoint) (err error) {
+ var logp = `RegisterEndpoint`
+
if ep.Call == nil {
- return errors.New(`http.RegisterEndpoint: empty Call field`)
+ return errors.New(logp + `: empty Call field`)
}
switch ep.Method {
case RequestMethodConnect:
- return errors.New(`http.RegisterEndpoint: can't handle CONNECT method yet`)
+ return errors.New(logp + `: can't handle CONNECT method yet`)
case RequestMethodDelete:
- err = srv.registerDelete(ep)
+ err = srv.registerDelete(&ep)
case RequestMethodHead:
return nil
case RequestMethodOptions:
return nil
case RequestMethodPatch:
- err = srv.registerPatch(ep)
+ err = srv.registerPatch(&ep)
case RequestMethodPost:
- err = srv.registerPost(ep)
+ err = srv.registerPost(&ep)
case RequestMethodPut:
- err = srv.registerPut(ep)
+ err = srv.registerPut(&ep)
case RequestMethodTrace:
- return errors.New(`http.RegisterEndpoint: can't handle TRACE method yet`)
+ return errors.New(logp + `: can't handle TRACE method yet`)
case RequestMethodGet:
- ep.Method = RequestMethodGet
- err = srv.registerGet(ep)
+ err = srv.registerGet(&ep)
}
- return err
+ if err != nil {
+ return fmt.Errorf(`%s: %w`, logp, err)
+ }
+ return nil
}
// RegisterSSE register Server-Sent Events endpoint.
// It will return an error if the [SSEEndpoint.Call] field is not set or
// [ErrEndpointAmbiguous] if the same path is already registered.
-func (srv *Server) RegisterSSE(ep *SSEEndpoint) (err error) {
+func (srv *Server) RegisterSSE(ep SSEEndpoint) (err error) {
var logp = `RegisterSSE`
if ep.Call == nil {
@@ -149,7 +150,7 @@ func (srv *Server) RegisterSSE(ep *SSEEndpoint) (err error) {
}
}
- rute, err = newRouteSSE(ep)
+ rute, err = newRouteSSE(&ep)
if err != nil {
return err
}
@@ -190,6 +191,7 @@ func (srv *Server) RegisterEvaluator(eval Evaluator) {
// registerGet register HTTP method GET with callback to handle it.
func (srv *Server) registerGet(ep *Endpoint) (err error) {
+ ep.Method = RequestMethodGet
ep.RequestType = RequestTypeQuery
// Check if the same route already registered.