ipld-eth-server/vendor/github.com/aristanetworks/goarista/key/path.go

52 lines
1.1 KiB
Go
Raw Normal View History

// Copyright (c) 2018 Arista Networks, Inc.
// Use of this source code is governed by the Apache License 2.0
// that can be found in the COPYING file.
package key
import (
"bytes"
"fmt"
)
// Path represents a path decomposed into elements where each
// element is a Key. A Path can be interpreted as either
// absolute or relative depending on how it is used.
type Path []Key
// String returns the Path as an absolute path string.
func (p Path) String() string {
if len(p) == 0 {
return "/"
}
var buf bytes.Buffer
for _, element := range p {
buf.WriteByte('/')
buf.WriteString(element.String())
}
return buf.String()
}
// MarshalJSON marshals a Path to JSON.
func (p Path) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf(`{"_path":%q}`, p)), nil
}
// Equal returns whether a Path is equal to @other.
func (p Path) Equal(other interface{}) bool {
o, ok := other.(Path)
return ok && pathEqual(p, o)
}
func pathEqual(a, b Path) bool {
if len(a) != len(b) {
return false
}
for i := range a {
if !a[i].Equal(b[i]) {
return false
}
}
return true
}