1
16
17 package v1
18
19 import (
20 "encoding/json"
21 "fmt"
22 "strings"
23
24 "k8s.io/apimachinery/pkg/runtime/schema"
25 )
26
27
28
29
30
31 type GroupResource struct {
32 Group string `json:"group" protobuf:"bytes,1,opt,name=group"`
33 Resource string `json:"resource" protobuf:"bytes,2,opt,name=resource"`
34 }
35
36 func (gr *GroupResource) String() string {
37 if gr == nil {
38 return "<nil>"
39 }
40 if len(gr.Group) == 0 {
41 return gr.Resource
42 }
43 return gr.Resource + "." + gr.Group
44 }
45
46
47
48
49
50 type GroupVersionResource struct {
51 Group string `json:"group" protobuf:"bytes,1,opt,name=group"`
52 Version string `json:"version" protobuf:"bytes,2,opt,name=version"`
53 Resource string `json:"resource" protobuf:"bytes,3,opt,name=resource"`
54 }
55
56 func (gvr *GroupVersionResource) String() string {
57 if gvr == nil {
58 return "<nil>"
59 }
60 return strings.Join([]string{gvr.Group, "/", gvr.Version, ", Resource=", gvr.Resource}, "")
61 }
62
63
64
65
66
67 type GroupKind struct {
68 Group string `json:"group" protobuf:"bytes,1,opt,name=group"`
69 Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"`
70 }
71
72 func (gk *GroupKind) String() string {
73 if gk == nil {
74 return "<nil>"
75 }
76 if len(gk.Group) == 0 {
77 return gk.Kind
78 }
79 return gk.Kind + "." + gk.Group
80 }
81
82
83
84
85
86 type GroupVersionKind struct {
87 Group string `json:"group" protobuf:"bytes,1,opt,name=group"`
88 Version string `json:"version" protobuf:"bytes,2,opt,name=version"`
89 Kind string `json:"kind" protobuf:"bytes,3,opt,name=kind"`
90 }
91
92 func (gvk GroupVersionKind) String() string {
93 return gvk.Group + "/" + gvk.Version + ", Kind=" + gvk.Kind
94 }
95
96
97
98
99 type GroupVersion struct {
100 Group string `json:"group" protobuf:"bytes,1,opt,name=group"`
101 Version string `json:"version" protobuf:"bytes,2,opt,name=version"`
102 }
103
104
105 func (gv GroupVersion) Empty() bool {
106 return len(gv.Group) == 0 && len(gv.Version) == 0
107 }
108
109
110
111 func (gv GroupVersion) String() string {
112
113 if gv.Empty() {
114 return ""
115 }
116
117
118 if len(gv.Group) == 0 && gv.Version == "v1" {
119 return gv.Version
120 }
121 if len(gv.Group) > 0 {
122 return gv.Group + "/" + gv.Version
123 }
124 return gv.Version
125 }
126
127
128 func (gv GroupVersion) MarshalJSON() ([]byte, error) {
129 s := gv.String()
130 if strings.Count(s, "/") > 1 {
131 return []byte{}, fmt.Errorf("illegal GroupVersion %v: contains more than one /", s)
132 }
133 return json.Marshal(s)
134 }
135
136 func (gv *GroupVersion) unmarshal(value []byte) error {
137 var s string
138 if err := json.Unmarshal(value, &s); err != nil {
139 return err
140 }
141 parsed, err := schema.ParseGroupVersion(s)
142 if err != nil {
143 return err
144 }
145 gv.Group, gv.Version = parsed.Group, parsed.Version
146 return nil
147 }
148
149
150 func (gv *GroupVersion) UnmarshalJSON(value []byte) error {
151 return gv.unmarshal(value)
152 }
153
154
155 func (gv *GroupVersion) UnmarshalText(value []byte) error {
156 return gv.unmarshal(value)
157 }
158
View as plain text