tailscale.comtailscale.com/types/views Index | Files

package views

import "tailscale.com/types/views"

Package views provides read-only accessors for commonly used value types.

Index

Functions

func AppendStrings

func AppendStrings[T fmt.Stringer](dst []string, v Slice[T]) []string

AppendStrings appends the string representation of each element in v to dst.

func ContainsPointers

func ContainsPointers[T any]() bool

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 MapViewsEqual

func MapViewsEqual[K, V comparable](a, b Map[K, V]) bool

MapViewsEqual returns whether the two given [Map]s are equal. Both K and V must be comparable; if V is non-comparable, use MapViewsEqualFunc instead.

func MapViewsEqualFunc

func MapViewsEqualFunc[K comparable, V1, V2 any](a Map[K, V1], b Map[K, V2], eq func(V1, V2) bool) bool

MapViewsEqualFunc returns whether the two given [Map]s are equal, using the given function to compare two values.

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.

func SliceEqualAnyOrderFunc

func SliceEqualAnyOrderFunc[T any, V comparable](a, b Slice[T], cmp func(T) V) bool

SliceEqualAnyOrderFunc reports whether a and b contain the same elements, regardless of order. The underlying slices for a and b can be nil.

The provided function should return a comparable value for each element.

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

func ByteSliceOf[T ~[]byte](x T) ByteSlice[T]

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]) At

func (v ByteSlice[T]) At(i int) byte

At returns the byte at index `i` of the slice.

func (ByteSlice[T]) Equal

func (v ByteSlice[T]) Equal(b T) bool

Equal reports whether the underlying slice is equal to b.

func (ByteSlice[T]) EqualView

func (v ByteSlice[T]) EqualView(b ByteSlice[T]) bool

EqualView reports whether the underlying slice is equal to b.

func (ByteSlice[T]) IsNil

func (v ByteSlice[T]) IsNil() bool

IsNil reports whether the underlying slice is nil.

func (ByteSlice[T]) Len

func (v ByteSlice[T]) Len() int

Len returns the length of the 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

func (v ByteSlice[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (ByteSlice[T]) Mem

func (v ByteSlice[T]) Mem() mem.RO

Mem returns a read-only view of the underlying slice.

func (ByteSlice[T]) Slice

func (v ByteSlice[T]) Slice(i, j int) ByteSlice[T]

Slice returns v[i:j]

func (ByteSlice[T]) SliceFrom

func (v ByteSlice[T]) SliceFrom(i int) ByteSlice[T]

SliceFrom returns v[i:].

func (ByteSlice[T]) SliceTo

func (v ByteSlice[T]) SliceTo(i int) ByteSlice[T]

SliceTo returns v[:i]

func (*ByteSlice[T]) UnmarshalJSON

func (v *ByteSlice[T]) UnmarshalJSON(b []byte) error

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]) All

func (m Map[K, V]) All() iter.Seq2[K, V]

All returns an iterator iterating over the keys and values of m.

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]) Contains

func (m Map[K, V]) Contains(k K) bool

Contains reports whether k has an entry in the map.

func (Map[K, V]) Get

func (m Map[K, V]) Get(k K) V

Get returns the element with key k.

func (Map[K, V]) GetOk

func (m Map[K, V]) GetOk(k K) (V, bool)

GetOk returns the element with key k and a bool representing whether the key is in map.

func (Map[K, V]) Has

func (m Map[K, V]) Has(k K) bool

Has reports whether k has an entry in the map. Deprecated: use Contains instead.

func (Map[K, V]) IsNil

func (m Map[K, V]) IsNil() bool

IsNil reports whether the underlying map is nil.

func (Map[K, V]) Len

func (m Map[K, V]) Len() int

Len returns the number of elements in the map.

func (Map[K, V]) MarshalJSON

func (m Map[K, V]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (*Map[K, V]) UnmarshalJSON

func (m *Map[K, V]) UnmarshalJSON(b []byte) error

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]) All

func (m MapFn[K, T, V]) All() iter.Seq2[K, V]

All returns an iterator iterating over the keys and value views of m.

func (MapFn[K, T, V]) Contains

func (m MapFn[K, T, V]) Contains(k K) bool

Contains reports whether k has an entry in the map.

func (MapFn[K, T, V]) Get

func (m MapFn[K, T, V]) Get(k K) V

Get returns the element with key k.

func (MapFn[K, T, V]) GetOk

func (m MapFn[K, T, V]) GetOk(k K) (V, bool)

GetOk returns the element with key k and a bool representing whether the key is in map.

func (MapFn[K, T, V]) Has

func (m MapFn[K, T, V]) Has(k K) bool

Has reports whether k has an entry in the map. Deprecated: use Contains instead.

func (MapFn[K, T, V]) IsNil

func (m MapFn[K, T, V]) IsNil() bool

IsNil reports whether the underlying map is nil.

func (MapFn[K, T, V]) Len

func (m MapFn[K, T, V]) Len() int

Len returns the number of elements in the map.

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]) All

func (m MapSlice[K, V]) All() iter.Seq2[K, Slice[V]]

All returns an iterator iterating over the keys and values of m.

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]) Contains

func (m MapSlice[K, V]) Contains(k K) bool

Contains reports whether k has an entry in the map.

func (MapSlice[K, V]) Get

func (m MapSlice[K, V]) Get(k K) Slice[V]

Get returns the element with key k.

func (MapSlice[K, V]) GetOk

func (m MapSlice[K, V]) GetOk(k K) (Slice[V], bool)

GetOk returns the element with key k and a bool representing whether the key is in map.

func (MapSlice[K, V]) IsNil

func (m MapSlice[K, V]) IsNil() bool

IsNil reports whether the underlying map is nil.

func (MapSlice[K, V]) Len

func (m MapSlice[K, V]) Len() int

Len returns the number of elements in the map.

func (MapSlice[K, V]) MarshalJSON

func (m MapSlice[K, V]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (*MapSlice[K, V]) UnmarshalJSON

func (m *MapSlice[K, V]) UnmarshalJSON(b []byte) error

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

func SliceOf[T any](x []T) Slice[T]

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]) All

func (v Slice[T]) All() iter.Seq2[int, T]

All returns an iterator over v.

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]) At

func (v Slice[T]) At(i int) T

At returns the element at index `i` of the slice.

func (Slice[T]) ContainsFunc

func (v Slice[T]) ContainsFunc(f func(T) bool) bool

ContainsFunc reports whether any element in v satisfies f(e).

As it runs in O(n) time, use with care.

func (Slice[T]) IndexFunc

func (v Slice[T]) IndexFunc(f func(T) bool) int

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]) IsNil

func (v Slice[T]) IsNil() bool

IsNil reports whether the underlying slice is nil.

func (Slice[T]) Len

func (v Slice[T]) Len() int

Len returns the length of the slice.

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

func (v Slice[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (Slice[T]) Slice

func (v Slice[T]) Slice(i, j int) Slice[T]

Slice returns v[i:j]

func (Slice[T]) SliceFrom

func (v Slice[T]) SliceFrom(i int) Slice[T]

SliceFrom returns v[i:].

func (Slice[T]) SliceTo

func (v Slice[T]) SliceTo(i int) Slice[T]

SliceTo returns v[:i]

func (*Slice[T]) UnmarshalJSON

func (v *Slice[T]) UnmarshalJSON(b []byte) error

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]) All

func (v SliceView[T, V]) All() iter.Seq2[int, V]

All returns an iterator over v.

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]) At

func (v SliceView[T, V]) At(i int) V

At returns a View of the element at index `i` of the slice.

func (SliceView[T, V]) IsNil

func (v SliceView[T, V]) IsNil() bool

IsNil reports whether the underlying slice is nil.

func (SliceView[T, V]) Len

func (v SliceView[T, V]) Len() int

Len returns the length of the 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

func (v SliceView[T, V]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (SliceView[T, V]) Slice

func (v SliceView[T, V]) Slice(i, j int) SliceView[T, V]

Slice returns v[i:j]

func (SliceView[T, V]) SliceFrom

func (v SliceView[T, V]) SliceFrom(i int) SliceView[T, V]

SliceFrom returns v[i:].

func (SliceView[T, V]) SliceTo

func (v SliceView[T, V]) SliceTo(i int) SliceView[T, V]

SliceTo returns v[:i]

func (*SliceView[T, V]) UnmarshalJSON

func (v *SliceView[T, V]) UnmarshalJSON(b []byte) error

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 ValuePointer

type ValuePointer[T any] struct {
	// contains filtered or unexported fields
}

ValuePointer provides a read-only view of a pointer to a value type, such as a primitive type or an immutable struct. Its Value and ValueOk methods return a stack-allocated shallow copy of the underlying value. It is the caller's responsibility to ensure that T is free from memory aliasing/mutation concerns.

func ValuePointerOf

func ValuePointerOf[T any](v *T) ValuePointer[T]

ValuePointerOf returns an immutable view of a pointer to an immutable value. It is the caller's responsibility to ensure that T is free from memory aliasing/mutation concerns.

func (ValuePointer[T]) Clone

func (p ValuePointer[T]) Clone() *T

Clone returns a shallow copy of the underlying value.

func (ValuePointer[T]) Get

func (p ValuePointer[T]) Get() T

Get returns a shallow copy of the value if the underlying pointer is non-nil. Otherwise, it returns a zero value.

func (ValuePointer[T]) GetOk

func (p ValuePointer[T]) GetOk() (value T, ok bool)

GetOk returns a shallow copy of the underlying value and true if the underlying pointer is non-nil. Otherwise, it returns a zero value and false.

func (ValuePointer[T]) GetOr

func (p ValuePointer[T]) GetOr(def T) T

GetOr returns a shallow copy of the underlying value if it is non-nil. Otherwise, it returns the provided default value.

func (ValuePointer[T]) MarshalJSON

func (p ValuePointer[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (ValuePointer[T]) String

func (p ValuePointer[T]) String() string

String implements fmt.Stringer.

func (*ValuePointer[T]) UnmarshalJSON

func (p *ValuePointer[T]) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler.

func (ValuePointer[T]) Valid

func (p ValuePointer[T]) Valid() bool

Valid reports whether the underlying pointer is non-nil.

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.

Source Files

views.go

Version
v1.84.1 (latest)
Published
May 29, 2025
Platform
linux/amd64
Imports
10 packages
Last checked
21 hours ago

Tools for package owners.