Added basic functionality
This commit is contained in:
49
Server.go
Normal file
49
Server.go
Normal file
@ -0,0 +1,49 @@
|
||||
package aero
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.akyoto.dev/go/router"
|
||||
)
|
||||
|
||||
// Handler is a function that deals with the given request/response context.
|
||||
type Handler func(Context) error
|
||||
|
||||
// Server represents a single web service.
|
||||
type Server struct {
|
||||
router *router.Router[Handler]
|
||||
}
|
||||
|
||||
// New creates a new server.
|
||||
func New() *Server {
|
||||
return &Server{
|
||||
router: router.New[Handler](),
|
||||
}
|
||||
}
|
||||
|
||||
// Get registers your function to be called when the given GET path has been requested.
|
||||
func (server *Server) Get(path string, handler Handler) {
|
||||
server.router.Add("GET", path, handler)
|
||||
}
|
||||
|
||||
// ServeHTTP responds to the given request.
|
||||
func (server *Server) ServeHTTP(response http.ResponseWriter, request *http.Request) {
|
||||
ctx := newContext(request, response)
|
||||
handler := server.router.LookupNoAlloc(request.Method, request.URL.Path, ctx.addParameter)
|
||||
|
||||
if handler == nil {
|
||||
response.WriteHeader(http.StatusNotFound)
|
||||
fmt.Fprint(response, http.StatusText(http.StatusNotFound))
|
||||
contextPool.Put(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
err := handler(ctx)
|
||||
|
||||
if err != nil {
|
||||
fmt.Fprint(response, err.Error())
|
||||
}
|
||||
|
||||
contextPool.Put(ctx)
|
||||
}
|
Reference in New Issue
Block a user