github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/types/reference.go (about)

     1  // Package types - Content managed by Project Forge, see [projectforge.md] for details.
     2  package types
     3  
     4  import (
     5  	"slices"
     6  	"strings"
     7  
     8  	"github.com/kyleu/dbaudit/app/util"
     9  )
    10  
    11  const KeyReference = "reference"
    12  
    13  type Reference struct {
    14  	Pkg util.Pkg `json:"pkg,omitempty"`
    15  	K   string   `json:"k"`
    16  }
    17  
    18  func (x *Reference) Key() string {
    19  	return KeyReference
    20  }
    21  
    22  func (x *Reference) Sortable() bool {
    23  	return true
    24  }
    25  
    26  func (x *Reference) Scalar() bool {
    27  	return false
    28  }
    29  
    30  func (x *Reference) String() string {
    31  	return "ref:" + strings.Join(x.Path(), ".")
    32  }
    33  
    34  func (x *Reference) From(v any) any {
    35  	return invalidInput(x.Key(), v)
    36  }
    37  
    38  func (x *Reference) Path() util.Pkg {
    39  	ret := slices.Clone(x.Pkg)
    40  	return append(ret, x.K)
    41  }
    42  
    43  func (x *Reference) Default(string) any {
    44  	return ""
    45  }
    46  
    47  func NewReference() *Wrapped {
    48  	return Wrap(&Reference{})
    49  }
    50  
    51  func NewReferenceArgs(pkg util.Pkg, k string) *Wrapped {
    52  	return Wrap(&Reference{Pkg: pkg, K: k})
    53  }