Skip to content

Commit fa50d36

Browse files
authored
fix: no content issues on error or pointer to Empty (#125)
1 parent 22abda1 commit fa50d36

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

handler.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ func H[T, O any](handle Handle[T, O]) httprouter.Handle {
4141
var (
4242
req = new(T)
4343
res any
44+
err error
4445
)
4546

46-
err := decodeRequest(req, ctx, p)
47+
err = decodeRequest(req, ctx, p)
4748
if err != nil {
4849
res = Error(err, getStatusCode(err, http.StatusBadRequest))
4950
} else {
@@ -65,7 +66,7 @@ func H[T, O any](handle Handle[T, O]) httprouter.Handle {
6566
ctx.SetStatusCode(sc.StatusCode())
6667
}
6768

68-
if isNil(res) {
69+
if err == nil && isNil(res) {
6970
res = nil
7071
ctx.Response.Header.SetContentLength(-3)
7172
}

nilcheck.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ func makeNilCheck(zero any) func(v any) bool {
1515
if _, ok := zero.(Empty); ok {
1616
return func(v any) bool { return true }
1717
}
18+
if _, ok := zero.(*Empty); ok {
19+
return func(v any) bool { return true }
20+
}
1821

1922
switch reflect.TypeOf(zero).Kind() {
2023
case reflect.String, reflect.Ptr:
@@ -26,7 +29,7 @@ func makeNilCheck(zero any) func(v any) bool {
2629
return (*emptyInterface)(unsafe.Pointer(&v)).ptr == nil
2730
}
2831
case reflect.Slice:
29-
// Return true for and nil slice.
32+
// Return true for nil slice.
3033
return func(v any) bool {
3134
header := (*reflect.SliceHeader)((*emptyInterface)(unsafe.Pointer(&v)).ptr)
3235
return header.Data == 0

0 commit comments

Comments
 (0)