diff options
author | pj <pjebs@users.noreply.github.com> | 2022-10-07 01:25:32 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-06 16:25:32 +0200 |
commit | d404f2db91fcf59244f75272ceaa1d28d9ff352c (patch) | |
tree | f8bcc7aedfe22e841a192a95aca93462634faf74 /userdata.go | |
parent | test: merge test in adaptor_test.go (#1381) (diff) | |
download | fasthttp-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.go | 33 |
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) } |