blob: eeb380c3dc39ea225f4eb19b51b95aeba31a8d96 [file] [log] [blame]
Zack Williamse940c7a2019-08-21 14:25:39 -07001/*
2Copyright 2015 The Kubernetes Authors.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17package runtime
18
19import "k8s.io/apimachinery/pkg/runtime/schema"
20
21// SetGroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta
22func (obj *TypeMeta) SetGroupVersionKind(gvk schema.GroupVersionKind) {
23 obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind()
24}
25
26// GroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta
27func (obj *TypeMeta) GroupVersionKind() schema.GroupVersionKind {
28 return schema.FromAPIVersionAndKind(obj.APIVersion, obj.Kind)
29}
30
31func (obj *TypeMeta) GetObjectKind() schema.ObjectKind { return obj }
32
33// GetObjectKind implements Object for VersionedObjects, returning an empty ObjectKind
34// interface if no objects are provided, or the ObjectKind interface of the object in the
35// highest array position.
36func (obj *VersionedObjects) GetObjectKind() schema.ObjectKind {
37 last := obj.Last()
38 if last == nil {
39 return schema.EmptyObjectKind
40 }
41 return last.GetObjectKind()
42}
43
44// First returns the leftmost object in the VersionedObjects array, which is usually the
45// object as serialized on the wire.
46func (obj *VersionedObjects) First() Object {
47 if len(obj.Objects) == 0 {
48 return nil
49 }
50 return obj.Objects[0]
51}
52
53// Last is the rightmost object in the VersionedObjects array, which is the object after
54// all transformations have been applied. This is the same object that would be returned
55// by Decode in a normal invocation (without VersionedObjects in the into argument).
56func (obj *VersionedObjects) Last() Object {
57 if len(obj.Objects) == 0 {
58 return nil
59 }
60 return obj.Objects[len(obj.Objects)-1]
61}