Documentation ¶
Overview ¶
Package views provides read-only accessors for commonly used value types.
Index ¶
- func AppendStrings[T fmt.Stringer](dst []string, v Slice[T]) []string
- func ContainsPointers[T any]() bool
- func SliceContains[T comparable](v Slice[T], e T) bool
- func SliceEqual[T comparable](a, b Slice[T]) bool
- func SliceEqualAnyOrder[T comparable](a, b Slice[T]) bool
- type ByteSlice
- func (v ByteSlice[T]) AppendTo(dst T) T
- func (v ByteSlice[T]) AsSlice() T
- func (v ByteSlice[T]) At(i int) byte
- func (v ByteSlice[T]) Equal(b T) bool
- func (v ByteSlice[T]) EqualView(b ByteSlice[T]) bool
- func (v ByteSlice[T]) IsNil() bool
- func (v ByteSlice[T]) Len() int
- func (v ByteSlice[T]) MapKey() SliceMapKey[byte]
- func (v ByteSlice[T]) MarshalJSON() ([]byte, error)
- func (v ByteSlice[T]) Mem() mem.RO
- func (v ByteSlice[T]) Slice(i, j int) ByteSlice[T]
- func (v ByteSlice[T]) SliceFrom(i int) ByteSlice[T]
- func (v ByteSlice[T]) SliceTo(i int) ByteSlice[T]
- func (v *ByteSlice[T]) UnmarshalJSON(b []byte) error
- type Cloner
- type Map
- func (m Map[K, V]) All() iter.Seq2[K, V]
- func (m Map[K, V]) AsMap() map[K]V
- func (m Map[K, V]) Contains(k K) bool
- func (m Map[K, V]) Get(k K) V
- func (m Map[K, V]) GetOk(k K) (V, bool)
- func (m Map[K, V]) Has(k K) bool
- func (m Map[K, V]) IsNil() bool
- func (m Map[K, V]) Len() int
- func (m Map[K, V]) MarshalJSON() ([]byte, error)
- func (m Map[K, V]) Range(f MapRangeFn[K, V])
- func (m *Map[K, V]) UnmarshalJSON(b []byte) error
- type MapFn
- func (m MapFn[K, T, V]) All() iter.Seq2[K, V]
- func (m MapFn[K, T, V]) Contains(k K) bool
- func (m MapFn[K, T, V]) Get(k K) V
- func (m MapFn[K, T, V]) GetOk(k K) (V, bool)
- func (m MapFn[K, T, V]) Has(k K) bool
- func (m MapFn[K, T, V]) IsNil() bool
- func (m MapFn[K, T, V]) Len() int
- func (m MapFn[K, T, V]) Range(f MapRangeFn[K, V])
- type MapRangeFn
- type MapSlice
- func (m MapSlice[K, V]) All() iter.Seq2[K, Slice[V]]
- func (m MapSlice[K, V]) AsMap() map[K][]V
- func (m MapSlice[K, V]) Contains(k K) bool
- func (m MapSlice[K, V]) Get(k K) Slice[V]
- func (m MapSlice[K, V]) GetOk(k K) (Slice[V], bool)
- func (m MapSlice[K, V]) IsNil() bool
- func (m MapSlice[K, V]) Len() int
- func (m MapSlice[K, V]) MarshalJSON() ([]byte, error)
- func (m MapSlice[K, V]) Range(f MapRangeFn[K, Slice[V]])
- func (m *MapSlice[K, V]) UnmarshalJSON(b []byte) error
- type Slice
- func (v Slice[T]) All() iter.Seq2[int, T]
- func (v Slice[T]) AppendTo(dst []T) []T
- func (v Slice[T]) AsSlice() []T
- func (v Slice[T]) At(i int) T
- func (v Slice[T]) ContainsFunc(f func(T) bool) bool
- func (v Slice[T]) IndexFunc(f func(T) bool) int
- func (v Slice[T]) IsNil() bool
- func (v Slice[T]) Len() int
- func (v Slice[T]) MapKey() SliceMapKey[T]
- func (v Slice[T]) MarshalJSON() ([]byte, error)
- func (v Slice[T]) Slice(i, j int) Slice[T]
- func (v Slice[T]) SliceFrom(i int) Slice[T]
- func (v Slice[T]) SliceTo(i int) Slice[T]
- func (v *Slice[T]) UnmarshalJSON(b []byte) error
- type SliceMapKey
- type SliceView
- func (v SliceView[T, V]) All() iter.Seq2[int, V]
- func (v SliceView[T, V]) AppendTo(dst []V) []V
- func (v SliceView[T, V]) AsSlice() []V
- func (v SliceView[T, V]) At(i int) V
- func (v SliceView[T, V]) IsNil() bool
- func (v SliceView[T, V]) Len() int
- func (v SliceView[T, V]) MapKey() SliceMapKey[T]
- func (v SliceView[T, V]) MarshalJSON() ([]byte, error)
- func (v SliceView[T, V]) Slice(i, j int) SliceView[T, V]
- func (v SliceView[T, V]) SliceFrom(i int) SliceView[T, V]
- func (v SliceView[T, V]) SliceTo(i int) SliceView[T, V]
- func (v *SliceView[T, V]) UnmarshalJSON(b []byte) error
- type StructView
- type ViewCloner
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AppendStrings ¶
AppendStrings appends the string representation of each element in v to dst.
func ContainsPointers ¶
ContainsPointers reports whether T contains any pointers, either explicitly or implicitly. It has special handling for some types that contain pointers that we know are free from memory aliasing/mutation concerns.
func SliceContains ¶
func SliceContains[T comparable](v Slice[T], e T) bool
SliceContains reports whether v contains element e.
As it runs in O(n) time, use with care.
func SliceEqual ¶
func SliceEqual[T comparable](a, b Slice[T]) bool
SliceEqual is like the standard library's slices.Equal, but for two views.
func SliceEqualAnyOrder ¶
func SliceEqualAnyOrder[T comparable](a, b Slice[T]) bool
SliceEqualAnyOrder reports whether a and b contain the same elements, regardless of order. The underlying slices for a and b can be nil.
Types ¶
type ByteSlice ¶
type ByteSlice[T ~[]byte] struct { // contains filtered or unexported fields }
ByteSlice is a read-only accessor for types that are backed by a []byte.
func ByteSliceOf ¶
ByteSliceOf returns a ByteSlice for the provided slice.
func (ByteSlice[T]) AppendTo ¶
func (v ByteSlice[T]) AppendTo(dst T) T
AppendTo appends the underlying slice values to dst.
func (ByteSlice[T]) AsSlice ¶
func (v ByteSlice[T]) AsSlice() T
AsSlice returns a copy of the underlying slice.
func (ByteSlice[T]) MapKey ¶
func (v ByteSlice[T]) MapKey() SliceMapKey[byte]
MapKey returns a unique key for a slice, based on its address and length.
func (ByteSlice[T]) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (*ByteSlice[T]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
type Cloner ¶
type Cloner[T any] interface { // Clone returns a deep-clone of the receiver. // It returns nil, when the receiver is nil. Clone() T }
Cloner is any type that has a Clone function returning a deep-clone of the receiver.
type Map ¶
type Map[K comparable, V any] struct { // contains filtered or unexported fields }
Map provides a read-only view of a map. It is the caller's responsibility to make sure V is immutable.
func MapOf ¶
func MapOf[K comparable, V any](m map[K]V) Map[K, V]
MapOf returns a view over m. It is the caller's responsibility to make sure V is immutable.
func (Map[K, V]) AsMap ¶
func (m Map[K, V]) AsMap() map[K]V
AsMap returns a shallow-clone of the underlying map. If V is a pointer type, it is the caller's responsibility to make sure the values are immutable.
func (Map[K, V]) GetOk ¶
GetOk returns the element with key k and a bool representing whether the key is in map.
func (Map[K, V]) Has ¶
Has reports whether k has an entry in the map. Deprecated: use Contains instead.
func (Map[K, V]) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (Map[K, V]) Range ¶
func (m Map[K, V]) Range(f MapRangeFn[K, V])
Range calls f for every k,v pair in the underlying map. It stops iteration immediately if f returns false.
func (*Map[K, V]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler. It should only be called on an uninitialized Map.
type MapFn ¶
type MapFn[K comparable, T any, V any] struct { // contains filtered or unexported fields }
MapFn is like Map but with a func to convert values from T to V. It is used to provide map of slices and views.
func MapFnOf ¶
func MapFnOf[K comparable, T any, V any](m map[K]T, f func(T) V) MapFn[K, T, V]
MapFnOf returns a MapFn for m.
func (MapFn[K, T, V]) GetOk ¶
GetOk returns the element with key k and a bool representing whether the key is in map.
func (MapFn[K, T, V]) Has ¶
Has reports whether k has an entry in the map. Deprecated: use Contains instead.
func (MapFn[K, T, V]) Range ¶
func (m MapFn[K, T, V]) Range(f MapRangeFn[K, V])
Range calls f for every k,v pair in the underlying map. It stops iteration immediately if f returns false.
type MapRangeFn ¶
type MapRangeFn[K comparable, V any] func(k K, v V) (cont bool)
MapRangeFn is the func called from a Map.Range call. Implementations should return false to stop range.
type MapSlice ¶
type MapSlice[K comparable, V any] struct { // contains filtered or unexported fields }
MapSlice is a view over a map whose values are slices.
func MapSliceOf ¶
func MapSliceOf[K comparable, V any](m map[K][]V) MapSlice[K, V]
MapSliceOf returns a MapSlice for the provided map. It is the caller's responsibility to make sure V is immutable.
func (MapSlice[K, V]) AsMap ¶
func (m MapSlice[K, V]) AsMap() map[K][]V
AsMap returns a shallow-clone of the underlying map.
If V is a pointer type, it is the caller's responsibility to make sure the values are immutable. The map and slices are cloned, but the values are not.
func (MapSlice[K, V]) GetOk ¶
GetOk returns the element with key k and a bool representing whether the key is in map.
func (MapSlice[K, V]) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (MapSlice[K, V]) Range ¶
func (m MapSlice[K, V]) Range(f MapRangeFn[K, Slice[V]])
Range calls f for every k,v pair in the underlying map. It stops iteration immediately if f returns false.
func (*MapSlice[K, V]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler. It should only be called on an uninitialized Map.
type Slice ¶
type Slice[T any] struct { // contains filtered or unexported fields }
Slice is a read-only accessor for a slice.
func SliceOf ¶
SliceOf returns a Slice for the provided slice for immutable values. It is the caller's responsibility to make sure V is immutable.
func (Slice[T]) AppendTo ¶
func (v Slice[T]) AppendTo(dst []T) []T
AppendTo appends the underlying slice values to dst.
func (Slice[T]) AsSlice ¶
func (v Slice[T]) AsSlice() []T
AsSlice returns a copy of underlying slice.
func (Slice[T]) ContainsFunc ¶
ContainsFunc reports whether any element in v satisfies f(e).
As it runs in O(n) time, use with care.
func (Slice[T]) IndexFunc ¶
IndexFunc returns the first index of an element in v satisfying f(e), or -1 if none do.
As it runs in O(n) time, use with care.
func (Slice[T]) MapKey ¶
func (v Slice[T]) MapKey() SliceMapKey[T]
MapKey returns a unique key for a slice, based on its address and length.
func (Slice[T]) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (*Slice[T]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
type SliceMapKey ¶
type SliceMapKey[T any] struct { // contains filtered or unexported fields }
SliceMapKey represents a comparable unique key for a slice, based on its address and length. It can be used to key maps by slices but should only be used when the underlying slice is immutable.
Empty and nil slices have different keys.
type SliceView ¶
type SliceView[T ViewCloner[T, V], V StructView[T]] struct { // contains filtered or unexported fields }
SliceView wraps []T to provide accessors which return an immutable view V of T. It is used to provide the equivalent of SliceOf([]V) without having to allocate []V from []T.
func SliceOfViews ¶
func SliceOfViews[T ViewCloner[T, V], V StructView[T]](x []T) SliceView[T, V]
SliceOfViews returns a ViewSlice for x.
func (SliceView[T, V]) AppendTo ¶
func (v SliceView[T, V]) AppendTo(dst []V) []V
AppendTo appends the underlying slice values to dst.
func (SliceView[T, V]) AsSlice ¶
func (v SliceView[T, V]) AsSlice() []V
AsSlice returns a copy of underlying slice.
func (SliceView[T, V]) MapKey ¶
func (v SliceView[T, V]) MapKey() SliceMapKey[T]
MapKey returns a unique key for a slice, based on its address and length.
func (SliceView[T, V]) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (*SliceView[T, V]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
type StructView ¶
type StructView[T any] interface { // Valid reports whether the underlying Viewable is nil. Valid() bool // AsStruct returns a deep-copy of the underlying value. // It returns nil, if Valid() is false. AsStruct() T }
StructView represents the corresponding StructView of a Viewable. The concrete types are typically generated by tailscale.com/cmd/viewer.
type ViewCloner ¶
type ViewCloner[T any, V StructView[T]] interface { // View returns a read-only view of Viewable. // If Viewable is nil, View().Valid() reports false. View() V // Clone returns a deep-clone of Viewable. // It returns nil, when Viewable is nil. Clone() T }
ViewCloner is any type that has had View and Clone funcs generated using tailscale.com/cmd/viewer.