aboutsummaryrefslogtreecommitdiff
path: root/lib/path/route.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2024-06-08 14:49:13 +0700
committerShulhan <ms@kilabit.info>2024-06-08 15:44:47 +0700
commitc8b408fc32fcaba43f69bd494305c52cbdeb06c6 (patch)
tree74c40a06fe12c70ee7f6598816f9ad2bbf7c18e4 /lib/path/route.go
parent85dffe4cb596ba8d5131c07f8993c6158184d988 (diff)
downloadpakakeh.go-c8b408fc32fcaba43f69bd494305c52cbdeb06c6.tar.xz
lib/path: add method Path to Route
Unlike String method that may return the key's name in returned path, the Path method return the path with all the keys has been substituted with values, even if its empty.
Diffstat (limited to 'lib/path/route.go')
-rw-r--r--lib/path/route.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/path/route.go b/lib/path/route.go
index f60ad310..578e2b62 100644
--- a/lib/path/route.go
+++ b/lib/path/route.go
@@ -149,6 +149,25 @@ func (rute *Route) Parse(rpath string) (vals map[string]string, ok bool) {
return vals, true
}
+// Path return the path with all the keys has been substituted with values,
+// even if its empty.
+// See [Route.String] for returning path with key name (as in ":name").
+func (rute *Route) Path() string {
+ var (
+ node *routeNode
+ pb strings.Builder
+ )
+ for _, node = range rute.nodes {
+ pb.WriteByte('/')
+ if node.isKey {
+ pb.WriteString(node.val)
+ } else {
+ pb.WriteString(node.name)
+ }
+ }
+ return pb.String()
+}
+
// Set or replace the key's value in path with parameter val.
// If the key exist it will return true; otherwise it will return false.
func (rute *Route) Set(key, val string) bool {
@@ -175,6 +194,9 @@ func (rute *Route) Set(key, val string) bool {
// between sub-path.
// If the key has been [Route.Set], the sub-path will be replaced with its
// value, otherwise it will returned as ":<key>".
+//
+// To return the path with all keys has been substituted, even empty, use
+// [Route.Path].
func (rute *Route) String() (path string) {
var (
node *routeNode