forked from openshift/cloud-credential-operator
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcodec.go
More file actions
97 lines (83 loc) · 2.98 KB
/
codec.go
File metadata and controls
97 lines (83 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
Copyright 2018 The OpenShift Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1
import (
"bytes"
"fmt"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
)
var scheme = runtime.NewScheme()
var codecFactory = serializer.NewCodecFactory(scheme)
var encoder runtime.Encoder = nil
var Codec *ProviderCodec = nil
func init() {
utilruntime.Must(Install(scheme))
var err error
encoder, err = newEncoder(&codecFactory)
utilruntime.Must(err)
Codec = &ProviderCodec{
encoder: encoder,
decoder: codecFactory.UniversalDecoder(SchemeGroupVersion),
}
}
// ProviderCodec is a runtime codec for providers.
// +k8s:deepcopy-gen=false
type ProviderCodec struct {
encoder runtime.Encoder
decoder runtime.Decoder
}
// EncodeProvider serializes an object to the provider spec.
func (codec *ProviderCodec) EncodeProviderSpec(in runtime.Object) (*runtime.RawExtension, error) {
var buf bytes.Buffer
if err := codec.encoder.Encode(in, &buf); err != nil {
return nil, fmt.Errorf("encoding failed: %v", err)
}
return &runtime.RawExtension{Raw: buf.Bytes()}, nil
}
// DecodeProviderSpec deserializes an object from the provider config.
func (codec *ProviderCodec) DecodeProviderSpec(providerConfig *runtime.RawExtension, out runtime.Object) error {
_, _, err := codec.decoder.Decode(providerConfig.Raw, nil, out)
if err != nil {
return fmt.Errorf("decoding failure: %v", err)
}
return nil
}
// EncodeProviderStatus serializes the provider status.
func (codec *ProviderCodec) EncodeProviderStatus(in runtime.Object) (*runtime.RawExtension, error) {
var buf bytes.Buffer
if err := codec.encoder.Encode(in, &buf); err != nil {
return nil, fmt.Errorf("encoding failed: %v", err)
}
return &runtime.RawExtension{Raw: buf.Bytes()}, nil
}
// DecodeProviderStatus deserializes the provider status.
func (codec *ProviderCodec) DecodeProviderStatus(providerStatus *runtime.RawExtension, out runtime.Object) error {
if providerStatus != nil {
_, _, err := codec.decoder.Decode(providerStatus.Raw, nil, out)
if err != nil {
return fmt.Errorf("decoding failure: %v", err)
}
return nil
}
return nil
}
func newEncoder(codecFactory *serializer.CodecFactory) (runtime.Encoder, error) {
serializerInfos := codecFactory.SupportedMediaTypes()
if len(serializerInfos) == 0 {
return nil, fmt.Errorf("unable to find any serlializers")
}
encoder := codecFactory.EncoderForVersion(serializerInfos[0].Serializer, SchemeGroupVersion)
return encoder, nil
}