Added Reader and String
This commit is contained in:
parent
10d6d51294
commit
7da8fffb90
16
Context.go
16
Context.go
@ -1,7 +1,9 @@
|
|||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
// maxParams defines the maximum number of parameters per route.
|
// maxParams defines the maximum number of parameters per route.
|
||||||
@ -11,6 +13,8 @@ const maxParams = 16
|
|||||||
type Context interface {
|
type Context interface {
|
||||||
Bytes([]byte) error
|
Bytes([]byte) error
|
||||||
Error(int, error) error
|
Error(int, error) error
|
||||||
|
Reader(io.Reader) error
|
||||||
|
String(string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// context represents a request & response context.
|
// context represents a request & response context.
|
||||||
@ -43,6 +47,18 @@ func (ctx *context) Error(status int, err error) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reader sends the contents of the io.Reader without creating an in-memory copy.
|
||||||
|
func (ctx *context) Reader(reader io.Reader) error {
|
||||||
|
_, err := io.Copy(ctx.response, reader)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// String responds with the given string.
|
||||||
|
func (ctx *context) String(body string) error {
|
||||||
|
slice := unsafe.Slice(unsafe.StringData(body), len(body))
|
||||||
|
return ctx.Bytes(slice)
|
||||||
|
}
|
||||||
|
|
||||||
// addParameter adds a new parameter to the context.
|
// addParameter adds a new parameter to the context.
|
||||||
func (ctx *context) addParameter(name string, value string) {
|
func (ctx *context) addParameter(name string, value string) {
|
||||||
ctx.paramNames[ctx.paramCount] = name
|
ctx.paramNames[ctx.paramCount] = name
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.akyoto.dev/go/assert"
|
"git.akyoto.dev/go/assert"
|
||||||
@ -26,6 +27,14 @@ func TestRouter(t *testing.T) {
|
|||||||
return ctx.Error(http.StatusUnauthorized, errors.New("Not logged in"))
|
return ctx.Error(http.StatusUnauthorized, errors.New("Not logged in"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
s.Get("/reader", func(ctx server.Context) error {
|
||||||
|
return ctx.Reader(strings.NewReader("Hello"))
|
||||||
|
})
|
||||||
|
|
||||||
|
s.Get("/string", func(ctx server.Context) error {
|
||||||
|
return ctx.String("Hello")
|
||||||
|
})
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
URL string
|
URL string
|
||||||
Status int
|
Status int
|
||||||
@ -35,6 +44,8 @@ func TestRouter(t *testing.T) {
|
|||||||
{URL: "/blog/post", Status: http.StatusOK, Body: "Hello"},
|
{URL: "/blog/post", Status: http.StatusOK, Body: "Hello"},
|
||||||
{URL: "/error", Status: http.StatusUnauthorized, Body: "Not logged in"},
|
{URL: "/error", Status: http.StatusUnauthorized, Body: "Not logged in"},
|
||||||
{URL: "/not-found", Status: http.StatusNotFound, Body: http.StatusText(http.StatusNotFound)},
|
{URL: "/not-found", Status: http.StatusNotFound, Body: http.StatusText(http.StatusNotFound)},
|
||||||
|
{URL: "/reader", Status: http.StatusOK, Body: "Hello"},
|
||||||
|
{URL: "/string", Status: http.StatusOK, Body: "Hello"},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user