github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/labels/name.go (about) 1 package labels 2 3 import ( 4 "errors" 5 6 "gopkg.in/yaml.v3" 7 ) 8 9 var _ IDLabels = (*Name)(nil) 10 11 type Name struct { 12 model InternalName 13 base *Component 14 } 15 16 type InternalNameProp struct { 17 Name string `yaml:"app.kubernetes.io/name,omitempty"` 18 } 19 20 type InternalName struct { 21 InternalNameProp `yaml:",inline"` 22 InternalComponent `yaml:",inline"` 23 } 24 25 func ForName(l *Component, name string) (*Name, error) { 26 if name == "" { 27 return nil, errors.New("name must not be nil") 28 } 29 return newName(l, name), nil 30 } 31 32 func newName(c *Component, name string) *Name { 33 return &Name{ 34 base: c, 35 model: InternalName{ 36 InternalNameProp: InternalNameProp{Name: name}, 37 InternalComponent: c.model, 38 }, 39 } 40 } 41 42 func NameFrom(arbitrary map[string]string) (*Name, error) { 43 intermediate, err := yaml.Marshal(arbitrary) 44 if err != nil { 45 panic(err) 46 } 47 n := &Name{} 48 return n, yaml.Unmarshal(intermediate, n) 49 } 50 51 func MustForName(l *Component, name string) *Name { 52 n, err := ForName(l, name) 53 if err != nil { 54 panic(err) 55 } 56 return n 57 } 58 59 func (l *Name) Name() string { 60 return l.model.Name 61 } 62 63 /* 64 func (l *Name) Major() int8 { 65 return l.base.Major() 66 } 67 */ 68 69 func (l *Name) Equal(r comparable) bool { 70 if right, ok := r.(*Name); ok { 71 return l.model == right.model 72 } 73 return false 74 } 75 76 func (l *Name) MarshalYAML() (interface{}, error) { 77 return l.model, nil 78 } 79 80 func (l *Name) UnmarshalYAML(node *yaml.Node) error { 81 if err := node.Decode(&l.model); err != nil { 82 return err 83 } 84 l.base = &Component{} 85 return node.Decode(l.base) 86 }