github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/labels/api.go (about) 1 package labels 2 3 import ( 4 "errors" 5 6 "gopkg.in/yaml.v3" 7 ) 8 9 var ( 10 _ Labels = (*API)(nil) 11 ) 12 13 type API struct { 14 model InternalAPI 15 base *Operator 16 } 17 18 func NoopAPI(l *Operator) *API { 19 return &API{ 20 base: l, 21 model: InternalAPI{ 22 Kind: "unkown", 23 ApiVersion: "unkown", 24 InternalOperator: l.model, 25 }, 26 } 27 } 28 29 func ForAPI(l *Operator, kind, version string) (*API, error) { 30 if kind == "" || version == "" { 31 return nil, errors.New("kind and version must not be nil") 32 } 33 34 return &API{ 35 base: l, 36 model: InternalAPI{ 37 Kind: kind, 38 ApiVersion: version, 39 InternalOperator: l.model, 40 }, 41 }, nil 42 } 43 44 func MustForAPI(l *Operator, kind, version string) *API { 45 a, err := ForAPI(l, kind, version) 46 if err != nil { 47 panic(err) 48 } 49 return a 50 } 51 52 func MustReplaceAPI(l *API, kind, version string) *API { 53 return MustForAPI(l.base, kind, version) 54 } 55 56 func (l *API) UnmarshalYAML(node *yaml.Node) error { 57 if err := node.Decode(&l.model); err != nil { 58 return err 59 } 60 l.base = &Operator{} 61 return node.Decode(l.base) 62 } 63 64 /* 65 func (l *API) Major() int8 { 66 return l.base.Major() 67 } 68 */ 69 70 func (l *API) Equal(r comparable) bool { 71 if right, ok := r.(*API); ok { 72 return l.model == right.model 73 } 74 return false 75 } 76 77 func (l *API) MarshalYAML() (interface{}, error) { 78 return nil, errors.New("type *labels.API is not serializable") 79 } 80 81 type InternalAPI struct { 82 Kind string `yaml:"caos.ch/kind"` 83 ApiVersion string `yaml:"caos.ch/apiversion"` 84 InternalOperator `yaml:",inline"` 85 }