From 78f3b007bf42846feff8342b64223252c3a74e2a Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Sun, 7 Jul 2024 20:28:42 +0200 Subject: ref: Simplify path builder code --- pkg/u/file.go | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) (limited to 'pkg/u/file.go') diff --git a/pkg/u/file.go b/pkg/u/file.go index fafe0fb..5010b3e 100644 --- a/pkg/u/file.go +++ b/pkg/u/file.go @@ -4,7 +4,7 @@ import ( "errors" "log/slog" "os" - "path/filepath" + "strings" ) func FileExist(filename string) bool { @@ -22,21 +22,43 @@ func FileExist(filename string) bool { } // This is just a slin wraper to make easier to compose path in the template -type Pathing string +type Pathing struct { + sb strings.Builder +} -func Root() Pathing { - return "/" +func NewPathing() *Pathing { + return &Pathing{} } -func (s Pathing) AddPath(p string) Pathing { - return Pathing(filepath.Join(string(s), p)) +func (s *Pathing) AddPath(p string) *Pathing { + if len(p) == 0 { + return s + } + + // if it has trailing / remove it + if p[len(p)-1] == '/' { + p = p[:len(p)-1] + return s.AddPath(p) + } + + // if it does not have it so add + if p[0] == '/' { + s.sb.WriteString(p) + } else { + s.sb.WriteString("/" + p) + } + + return s } -func (s Pathing) AddPaths(p []string) Pathing { - f := filepath.Join(p...) - return Pathing(filepath.Join(string(s), f)) +func (s *Pathing) AddPaths(p []string) *Pathing { + for _, v := range p { + s.AddPath(v) + } + + return s } -func (s Pathing) Done() string { - return string(s) +func (s *Pathing) Done() string { + return s.sb.String() } -- cgit v1.2.3