| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // Copyright (c) Tailscale Inc & AUTHORS
- // SPDX-License-Identifier: BSD-3-Clause
- package setting
- import (
- "fmt"
- jsonv2 "github.com/go-json-experiment/json"
- "github.com/go-json-experiment/json/jsontext"
- )
- // Origin describes where a policy or a policy setting is configured.
- type Origin struct {
- data settingOrigin
- }
- // settingOrigin is the marshallable data of an [Origin].
- type settingOrigin struct {
- Name string `json:",omitzero"`
- Scope PolicyScope
- }
- // NewOrigin returns a new [Origin] with the specified scope.
- func NewOrigin(scope PolicyScope) *Origin {
- return NewNamedOrigin("", scope)
- }
- // NewNamedOrigin returns a new [Origin] with the specified scope and name.
- func NewNamedOrigin(name string, scope PolicyScope) *Origin {
- return &Origin{settingOrigin{name, scope}}
- }
- // Scope reports the policy [PolicyScope] where the setting is configured.
- func (s Origin) Scope() PolicyScope {
- return s.data.Scope
- }
- // Name returns the name of the policy source where the setting is configured,
- // or "" if not available.
- func (s Origin) Name() string {
- return s.data.Name
- }
- // String implements [fmt.Stringer].
- func (s Origin) String() string {
- if s.Name() != "" {
- return fmt.Sprintf("%s (%v)", s.Name(), s.Scope())
- }
- return s.Scope().String()
- }
- // MarshalJSONV2 implements [jsonv2.MarshalerV2].
- func (s Origin) MarshalJSONV2(out *jsontext.Encoder, opts jsonv2.Options) error {
- return jsonv2.MarshalEncode(out, &s.data, opts)
- }
- // UnmarshalJSONV2 implements [jsonv2.UnmarshalerV2].
- func (s *Origin) UnmarshalJSONV2(in *jsontext.Decoder, opts jsonv2.Options) error {
- return jsonv2.UnmarshalDecode(in, &s.data, opts)
- }
- // MarshalJSON implements [json.Marshaler].
- func (s Origin) MarshalJSON() ([]byte, error) {
- return jsonv2.Marshal(s) // uses MarshalJSONV2
- }
- // UnmarshalJSON implements [json.Unmarshaler].
- func (s *Origin) UnmarshalJSON(b []byte) error {
- return jsonv2.Unmarshal(b, s) // uses UnmarshalJSONV2
- }
|