Added urlutil package with ShiftPath helper

This commit is contained in:
Maxim Lebedev 2023-01-02 06:16:33 +06:00
parent f02bde306d
commit 834af5d3cf
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
2 changed files with 53 additions and 0 deletions

View File

@ -0,0 +1,22 @@
package urlutil
import (
"path"
"strings"
)
// ShiftPath splits off the first component of p, which will be cleaned of
// relative components before processing. head will never contain a slash and
// tail will always be a rooted path without trailing slash.
//
// See: https://blog.merovius.de/posts/2017-06-18-how-not-to-use-an-http-router/
func ShiftPath(p string) (head, tail string) {
p = path.Clean("/" + p)
i := strings.Index(p[1:], "/") + 1
if i <= 0 {
return p[1:], "/"
}
return p[1:i], p[i:]
}

View File

@ -0,0 +1,31 @@
package urlutil_test
import (
"testing"
"source.toby3d.me/toby3d/auth/internal/urlutil"
)
func TestShiftPath(t *testing.T) {
t.Parallel()
for in, out := range map[string][2]string{
"/": {"", "/"},
"/foo": {"foo", "/"},
"/foo/": {"foo", "/"},
"/foo/bar": {"foo", "/bar"},
"/foo/bar/": {"foo", "/bar"},
} {
in, out := in, out
t.Run(in, func(t *testing.T) {
t.Parallel()
head, path := urlutil.ShiftPath(in)
if out[0] != head || out[1] != path {
t.Errorf("ShiftPath(%s) = '%s', '%s', want '%s', '%s'", in, head, path, out[0], out[1])
}
})
}
}