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  }