aboutsummaryrefslogtreecommitdiff
path: root/userdata.go
diff options
context:
space:
mode:
authorGravatar pj <pjebs@users.noreply.github.com> 2022-10-07 01:25:32 +1100
committerGravatar GitHub <noreply@github.com> 2022-10-06 16:25:32 +0200
commitd404f2db91fcf59244f75272ceaa1d28d9ff352c (patch)
treef8bcc7aedfe22e841a192a95aca93462634faf74 /userdata.go
parenttest: merge test in adaptor_test.go (#1381) (diff)
downloadfasthttp-d404f2db91fcf59244f75272ceaa1d28d9ff352c.tar.gz
fasthttp-d404f2db91fcf59244f75272ceaa1d28d9ff352c.tar.bz2
fasthttp-d404f2db91fcf59244f75272ceaa1d28d9ff352c.zip
make RequestCtx's userdata accept keys that are of type: interface{} (#1387)
Co-authored-by: rocketlaunchr-cto <rocketlaunchr.cloud@gmail.com>
Diffstat (limited to 'userdata.go')
-rw-r--r--userdata.go33
1 files changed, 21 insertions, 12 deletions
diff --git a/userdata.go b/userdata.go
index 37f7d9b..40690f6 100644
--- a/userdata.go
+++ b/userdata.go
@@ -5,18 +5,21 @@ import (
)
type userDataKV struct {
- key []byte
+ key interface{}
value interface{}
}
type userData []userDataKV
-func (d *userData) Set(key string, value interface{}) {
+func (d *userData) Set(key interface{}, value interface{}) {
+ if b, ok := key.([]byte); ok {
+ key = string(b)
+ }
args := *d
n := len(args)
for i := 0; i < n; i++ {
kv := &args[i]
- if string(kv.key) == key {
+ if kv.key == key {
kv.value = value
return
}
@@ -30,28 +33,31 @@ func (d *userData) Set(key string, value interface{}) {
if c > n {
args = args[:n+1]
kv := &args[n]
- kv.key = append(kv.key[:0], key...)
+ kv.key = key
kv.value = value
*d = args
return
}
kv := userDataKV{}
- kv.key = append(kv.key[:0], key...)
+ kv.key = key
kv.value = value
*d = append(args, kv)
}
func (d *userData) SetBytes(key []byte, value interface{}) {
- d.Set(b2s(key), value)
+ d.Set(key, value)
}
-func (d *userData) Get(key string) interface{} {
+func (d *userData) Get(key interface{}) interface{} {
+ if b, ok := key.([]byte); ok {
+ key = b2s(b)
+ }
args := *d
n := len(args)
for i := 0; i < n; i++ {
kv := &args[i]
- if string(kv.key) == key {
+ if kv.key == key {
return kv.value
}
}
@@ -59,7 +65,7 @@ func (d *userData) Get(key string) interface{} {
}
func (d *userData) GetBytes(key []byte) interface{} {
- return d.Get(b2s(key))
+ return d.Get(key)
}
func (d *userData) Reset() {
@@ -74,12 +80,15 @@ func (d *userData) Reset() {
*d = (*d)[:0]
}
-func (d *userData) Remove(key string) {
+func (d *userData) Remove(key interface{}) {
+ if b, ok := key.([]byte); ok {
+ key = b2s(b)
+ }
args := *d
n := len(args)
for i := 0; i < n; i++ {
kv := &args[i]
- if string(kv.key) == key {
+ if kv.key == key {
n--
args[i], args[n] = args[n], args[i]
args[n].value = nil
@@ -91,5 +100,5 @@ func (d *userData) Remove(key string) {
}
func (d *userData) RemoveBytes(key []byte) {
- d.Remove(b2s(key))
+ d.Remove(key)
}