Added Status method

This commit is contained in:
Eduard Urbach 2024-03-13 16:57:36 +01:00
parent 4d822dbc30
commit 1bcf4794f5
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
5 changed files with 17 additions and 13 deletions

View File

@ -13,11 +13,12 @@ const maxParams = 16
// Context represents the interface for a request & response context. // Context represents the interface for a request & response context.
type Context interface { type Context interface {
Bytes([]byte) error Bytes([]byte) error
Error(status int, messages ...any) error Error(messages ...any) error
Get(param string) string Get(param string) string
Reader(io.Reader) error Reader(io.Reader) error
Request() Request Request() Request
Response() Response Response() Response
Status(status int) Context
String(string) error String(string) error
} }
@ -46,7 +47,7 @@ func (ctx *ctx) Bytes(body []byte) error {
} }
// Error is used for sending error messages to the client. // Error is used for sending error messages to the client.
func (ctx *ctx) Error(status int, messages ...any) error { func (ctx *ctx) Error(messages ...any) error {
var combined []error var combined []error
for _, msg := range messages { for _, msg := range messages {
@ -58,7 +59,6 @@ func (ctx *ctx) Error(status int, messages ...any) error {
} }
} }
ctx.response.WriteHeader(status)
return errors.Join(combined...) return errors.Join(combined...)
} }
@ -89,6 +89,12 @@ func (ctx *ctx) Response() Response {
return &ctx.response return &ctx.response
} }
// Status sets the HTTP status of the response.
func (ctx *ctx) Status(status int) Context {
ctx.response.WriteHeader(status)
return ctx
}
// String responds with the given string. // String responds with the given string.
func (ctx *ctx) String(body string) error { func (ctx *ctx) String(body string) error {
slice := unsafe.Slice(unsafe.StringData(body), len(body)) slice := unsafe.Slice(unsafe.StringData(body), len(body))

View File

@ -2,7 +2,6 @@ package server
import ( import (
"context" "context"
"fmt"
"io" "io"
"log" "log"
"net" "net"
@ -70,7 +69,7 @@ func (server *Server) ServeHTTP(response http.ResponseWriter, request *http.Requ
} }
// Run starts the server on the given address. // Run starts the server on the given address.
func (server *Server) Run(address string) { func (server *Server) Run(address string) error {
srv := &http.Server{ srv := &http.Server{
Addr: address, Addr: address,
Handler: server, Handler: server,
@ -83,8 +82,7 @@ func (server *Server) Run(address string) {
listener, err := net.Listen("tcp", address) listener, err := net.Listen("tcp", address)
if err != nil { if err != nil {
fmt.Println(err) return err
return
} }
go srv.Serve(listener) go srv.Serve(listener)
@ -96,5 +94,5 @@ func (server *Server) Run(address string) {
ctx, cancel := context.WithTimeout(context.Background(), server.Config.Timeout.Shutdown) ctx, cancel := context.WithTimeout(context.Background(), server.Config.Timeout.Shutdown)
defer cancel() defer cancel()
srv.Shutdown(ctx) return srv.Shutdown(ctx)
} }

View File

@ -27,11 +27,11 @@ func TestRouter(t *testing.T) {
}) })
s.Get("/error", func(ctx server.Context) error { s.Get("/error", func(ctx server.Context) error {
return ctx.Error(http.StatusUnauthorized, "Not logged in") return ctx.Status(http.StatusUnauthorized).Error("Not logged in")
}) })
s.Get("/error2", func(ctx server.Context) error { s.Get("/error2", func(ctx server.Context) error {
return ctx.Error(http.StatusUnauthorized, "Not logged in", errors.New("Missing auth token")) return ctx.Status(http.StatusUnauthorized).Error("Not logged in", errors.New("Missing auth token"))
}) })
s.Get("/reader", func(ctx server.Context) error { s.Get("/reader", func(ctx server.Context) error {

2
go.mod
View File

@ -4,5 +4,5 @@ go 1.22
require ( require (
git.akyoto.dev/go/assert v0.1.3 git.akyoto.dev/go/assert v0.1.3
git.akyoto.dev/go/router v0.1.2 git.akyoto.dev/go/router v0.1.3
) )

4
go.sum
View File

@ -1,4 +1,4 @@
git.akyoto.dev/go/assert v0.1.3 h1:QwCUbmG4aZYsNk/OuRBz1zWVKmGlDUHhOnnDBfn8Qw8= git.akyoto.dev/go/assert v0.1.3 h1:QwCUbmG4aZYsNk/OuRBz1zWVKmGlDUHhOnnDBfn8Qw8=
git.akyoto.dev/go/assert v0.1.3/go.mod h1:0GzMaM0eURuDwtGkJJkCsI7r2aUKr+5GmWNTFPgDocM= git.akyoto.dev/go/assert v0.1.3/go.mod h1:0GzMaM0eURuDwtGkJJkCsI7r2aUKr+5GmWNTFPgDocM=
git.akyoto.dev/go/router v0.1.2 h1:UZq92uOqQwxH+fS8geEhQ5RLZS7sb/QLvwrRzXjaTcg= git.akyoto.dev/go/router v0.1.3 h1:H4wJCYdDD3/i9miYSK/e5sCoGiXe9OX7KmgH4/Toa60=
git.akyoto.dev/go/router v0.1.2/go.mod h1:VfSsK/Z6fUhT3pWaAAnuAcj++bWRZD+bzNaqJoTAunU= git.akyoto.dev/go/router v0.1.3/go.mod h1:VfSsK/Z6fUhT3pWaAAnuAcj++bWRZD+bzNaqJoTAunU=