mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 21:15:39 +00:00
af3d3c433b
This adds a new package containing generic types to be used for defining preference hierarchies. These include prefs.Item, prefs.List, prefs.StructList, and prefs.StructMap. Each of these types represents a configurable preference, holding the preference's state, value, and metadata. The metadata includes the default value (if it differs from the zero value of the Go type) and flags indicating whether a preference is managed via syspolicy or is hidden/read-only for another reason. This information can be marshaled and sent to the GUI, CLI and web clients as a source of truth regarding preference configuration, management, and visibility/mutability states. We plan to use these types to define device preferences, such as the updater preferences, the permission mode to be used on Windows with #tailscale/corp#18342, and certain global options that are currently exposed as tailscaled flags. We also aim to eventually use these types for profile-local preferences in ipn.Prefs and and as a replacement for ipn.MaskedPrefs. The generic preference types are compatible with the tailscale.com/cmd/viewer and tailscale.com/cmd/cloner utilities. Updates #12736 Signed-off-by: Nick Khyl <nickk@tailscale.com>
23 lines
503 B
Go
23 lines
503 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package prefs
|
|
|
|
// Options are used to configure additional parameters of a preference.
|
|
type Options func(s *metadata)
|
|
|
|
var (
|
|
// ReadOnly is an option that marks preference as read-only.
|
|
ReadOnly Options = markReadOnly
|
|
// Managed is an option that marks preference as managed.
|
|
Managed Options = markManaged
|
|
)
|
|
|
|
func markReadOnly(s *metadata) {
|
|
s.ReadOnly = true
|
|
}
|
|
|
|
func markManaged(s *metadata) {
|
|
s.Managed = true
|
|
}
|