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

47 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 (
"fmt"
)
// Pointer is a pointer to a path.
type Pointer interface {
Pointer() Path
}
// NewPointer creates a new pointer to a path.
func NewPointer(path Path) Pointer {
return pointer(path)
}
// This is the type returned by pointerKey.Key. Returning this is a
// lot faster than having pointerKey implement Pointer, since it is
// a compositeKey and thus would require reconstructing a Path from
// []interface{} any time the Pointer method is called.
type pointer Path
func (ptr pointer) Pointer() Path {
return Path(ptr)
}
func (ptr pointer) String() string {
return "{" + ptr.Pointer().String() + "}"
}
func (ptr pointer) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf(`{"_ptr":%q}`, ptr.Pointer().String())), nil
}
func (ptr pointer) Equal(other interface{}) bool {
o, ok := other.(Pointer)
return ok && pointerEqual(ptr, o)
}
func pointerEqual(a, b Pointer) bool {
return pathEqual(a.Pointer(), b.Pointer())
}