diff --git a/args.go b/args.go index 938e62e..a2290a8 100644 --- a/args.go +++ b/args.go @@ -644,11 +644,3 @@ func peekAllArgBytesToDst(dst [][]byte, h []argsKV, k []byte) [][]byte { } return dst } - -func peekArgsKeys(dst [][]byte, h []argsKV) [][]byte { - for i, n := 0, len(h); i < n; i++ { - kv := &h[i] - dst = append(dst, kv.key) - } - return dst -} diff --git a/header.go b/header.go index b6f9a8f..9971bb5 100644 --- a/header.go +++ b/header.go @@ -1992,9 +1992,25 @@ func (h *ResponseHeader) peekAll(key []byte) [][]byte { // either though ReleaseRequest or your request handler returning. // Any future calls to the Peek* will modify the returned value. // Do not store references to returned value. Make copies instead. -func (h *header) PeekKeys() [][]byte { +func (h *RequestHeader) PeekKeys() [][]byte { h.mulHeader = h.mulHeader[:0] - h.mulHeader = peekArgsKeys(h.mulHeader, h.h) + for key := range h.All() { + h.mulHeader = append(h.mulHeader, key) + } + return h.mulHeader +} + +// PeekKeys return all header keys. +// +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. +// Any future calls to the Peek* will modify the returned value. +// Do not store references to returned value. Make copies instead. +func (h *ResponseHeader) PeekKeys() [][]byte { + h.mulHeader = h.mulHeader[:0] + for key := range h.All() { + h.mulHeader = append(h.mulHeader, key) + } return h.mulHeader } diff --git a/header_test.go b/header_test.go index 430f292..da0b75e 100644 --- a/header_test.go +++ b/header_test.go @@ -3426,13 +3426,13 @@ func TestRequestHeader_Keys(t *testing.T) { t.Fatal(err) } actualKeys := h.PeekKeys() - expectedKeys := [][]byte{s2b("keep-alive"), s2b("aaa")} - if reflect.DeepEqual(actualKeys, expectedKeys) { + expectedKeys := [][]byte{[]byte("Content-Type"), []byte("Trailer"), []byte("Connection")} + if !reflect.DeepEqual(actualKeys, expectedKeys) { t.Fatalf("Unexpected value %q. Expected %q", actualKeys, expectedKeys) } actualTrailerKeys := h.PeekTrailerKeys() - expectedTrailerKeys := [][]byte{s2b("aaa"), s2b("bbb"), s2b("ccc")} - if reflect.DeepEqual(actualTrailerKeys, expectedTrailerKeys) { + expectedTrailerKeys := [][]byte{s2b("Aaa"), s2b("Bbb"), s2b("Ccc")} + if !reflect.DeepEqual(actualTrailerKeys, expectedTrailerKeys) { t.Fatalf("Unexpected value %q. Expected %q", actualTrailerKeys, expectedTrailerKeys) } } @@ -3446,13 +3446,13 @@ func TestResponseHeader_Keys(t *testing.T) { t.Fatal(err) } actualKeys := h.PeekKeys() - expectedKeys := [][]byte{s2b("keep-alive"), s2b("aaa")} - if reflect.DeepEqual(actualKeys, expectedKeys) { + expectedKeys := [][]byte{[]byte("Content-Type"), []byte("Trailer"), []byte("Connection")} + if !reflect.DeepEqual(actualKeys, expectedKeys) { t.Fatalf("Unexpected value %q. Expected %q", actualKeys, expectedKeys) } actualTrailerKeys := h.PeekTrailerKeys() - expectedTrailerKeys := [][]byte{s2b("aaa"), s2b("bbb"), s2b("ccc")} - if reflect.DeepEqual(actualTrailerKeys, expectedTrailerKeys) { + expectedTrailerKeys := [][]byte{s2b("Aaa"), s2b("Bbb"), s2b("Ccc")} + if !reflect.DeepEqual(actualTrailerKeys, expectedTrailerKeys) { t.Fatalf("Unexpected value %q. Expected %q", actualTrailerKeys, expectedTrailerKeys) } }