From 5529aa7a64d84d2e4c0e41d08ca1e957a6cb10eb Mon Sep 17 00:00:00 2001 From: shaj13 Date: Wed, 3 Feb 2021 00:16:37 -0800 Subject: [PATCH] fix: expose extensions clone method --- auth/extensions.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/auth/extensions.go b/auth/extensions.go index dce10f8..4bf88ff 100644 --- a/auth/extensions.go +++ b/auth/extensions.go @@ -51,3 +51,25 @@ func (exts Extensions) Has(key string) bool { _, ok := exts[key] return ok } + +// Clone returns a copy of extensions or nil if extensions is nil. +func (exts Extensions) Clone() Extensions { + if exts == nil { + return nil + } + + // Find total number of values. + nv := 0 + for _, v := range exts { + nv += len(v) + } + sv := make([]string, nv) // shared backing array for extensions values + cloned := make(Extensions, len(exts)) + for k, v := range exts { + n := copy(sv, v) + cloned[k] = sv[:n:n] + sv = sv[n:] + } + return exts + +}