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 }