aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/absolute.go
diff options
context:
space:
mode:
Diffstat (limited to 'container/absolute.go')
-rw-r--r--container/absolute.go30
1 files changed, 25 insertions, 5 deletions
diff --git a/container/absolute.go b/container/absolute.go
index cafb1804..8f1fa23b 100644
--- a/container/absolute.go
+++ b/container/absolute.go
@@ -5,10 +5,12 @@ import (
"errors"
"fmt"
"path"
+ "slices"
+ "strings"
"syscall"
)
-// AbsoluteError is returned by [NewAbsolute] and holds the invalid pathname.
+// AbsoluteError is returned by [NewAbs] and holds the invalid pathname.
type AbsoluteError struct {
Pathname string
}
@@ -37,23 +39,31 @@ func (a *Absolute) String() string {
return a.pathname
}
-// NewAbsolute checks pathname and returns a new [Absolute] if pathname is absolute.
-func NewAbsolute(pathname string) (*Absolute, error) {
+// NewAbs checks pathname and returns a new [Absolute] if pathname is absolute.
+func NewAbs(pathname string) (*Absolute, error) {
if !isAbs(pathname) {
return nil, &AbsoluteError{pathname}
}
return &Absolute{pathname}, nil
}
-// MustAbs calls [NewAbsolute] and panics on error.
+// MustAbs calls [NewAbs] and panics on error.
func MustAbs(pathname string) *Absolute {
- if a, err := NewAbsolute(pathname); err != nil {
+ if a, err := NewAbs(pathname); err != nil {
panic(err.Error())
} else {
return a
}
}
+// Append calls [path.Join] with [Absolute] as the first element.
+func (a *Absolute) Append(elem ...string) *Absolute {
+ return &Absolute{path.Join(append([]string{a.String()}, elem...)...)}
+}
+
+// Dir calls [path.Dir] with [Absolute] as its argument.
+func (a *Absolute) Dir() *Absolute { return &Absolute{path.Dir(a.String())} }
+
func (a *Absolute) GobEncode() ([]byte, error) { return []byte(a.String()), nil }
func (a *Absolute) GobDecode(data []byte) error {
pathname := string(data)
@@ -76,3 +86,13 @@ func (a *Absolute) UnmarshalJSON(data []byte) error {
a.pathname = pathname
return nil
}
+
+// SortAbs calls [slices.SortFunc] for a slice of [Absolute].
+func SortAbs(x []*Absolute) {
+ slices.SortFunc(x, func(a, b *Absolute) int { return strings.Compare(a.String(), b.String()) })
+}
+
+// CompactAbs calls [slices.CompactFunc] for a slice of [Absolute].
+func CompactAbs(s []*Absolute) []*Absolute {
+ return slices.CompactFunc(s, func(a *Absolute, b *Absolute) bool { return a.String() == b.String() })
+}